C 中自动 stdout 缓冲区刷新的规则是什么?

2023-12-26

我只是好奇应该满足哪些条件才能自动刷新标准输出缓冲区。

首先,我很困惑这个伪代码不会在每次迭代时打印输出:

while (1) {
    printf("Any text");
    sleep(1);
}

但如果我添加换行符,它就会。

经过几次实验,我发现在我的机器上标准输出缓冲区被刷新:

  1. 当我输入 stdout 1025 个字符或更多时;
  2. 当我读到标准输入时;
  3. 当我将换行符放入标准输出时;

第一个条件是完全清楚的——当缓冲区已满时,应该刷新它。第二个也有道理。但为什么换行符会导致刷新呢?其他隐含条件是什么?


自动刷新标准输出缓冲区的规则是实现定义的(ID)。流的时候是ID无缓冲的, 全缓冲, or 行缓冲.

当一个流是无缓冲的,字符旨在尽快从源或目的地出现。否则,字符可能会作为块累积并传输到主机环境或从主机环境传输。

当一个流是全缓冲,当缓冲区已满时,字符将作为块传输到主机环境或从主机环境传输。

当一个流是行缓冲,当遇到换行符时,字符将作为块传输到主机环境或从主机环境传输。此外,当缓冲区已满、在无缓冲流上请求输入或在需要从主机环境传输字符的行缓冲流上请求输入时,字符旨在作为块传输到主机环境。

对这些特性的支持是实现定义的, ... C11dr §7.21.3 3


我只是好奇应该满足哪些条件才能自动刷新标准输出缓冲区。

如果代码想确保输出被刷新,请使用fflush()。可以自动刷新流的其他条件是实现定义的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 中自动 stdout 缓冲区刷新的规则是什么? 的相关文章

  • Directory.Delete 之后 Directory.Exists 有时返回 true ?

    我有非常奇怪的行为 我有 Directory Delete tempFolder true if Directory Exists tempFolder 有时 Directory Exists 返回 true 为什么 可能是资源管理器打开了
  • 如何在c++中读取pcap文件来获取数据包信息?

    我想用 C 编写一个程序来读取 pcap 文件并获取数据包的信息 例如 len sourc ip flags 等 现在我找到了如下代码 我认为它会帮助我获取信息 但是我有一些疑问 首先我想知道应该将哪个库添加到我的程序中 然后什么是 pca
  • C中的malloc内存分配方案

    我在 C 中尝试使用 malloc 发现 malloc 在分配了一些内存后浪费了一些空间 下面是我用来测试 malloc 的一段代码 include
  • 使用 LINQ2SQL 在 ASP.NET MVC 中的各种模型存储库之间共享数据上下文

    我的应用程序中有 2 个存储库 每个存储库都有自己的数据上下文对象 最终结果是我尝试将从一个存储库检索到的对象附加到从另一个存储库检索到的对象 这会导致异常 Use 构造函数注入将 DataContext 注入每个存储库 public cl
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 如何创建包含 IPv4 地址的文本框? [复制]

    这个问题在这里已经有答案了 如何制作一个这样的文本框 我想所有的用户都见过这个并且知道它的功能 您可以使用带有 Mask 的 MaskedTestBox000 000 000 000 欲了解更多信息 请参阅文档 http msdn micr
  • 如何区分用户点击链接和页面自动重定向?

    拥有 C WebBrowser control http msdn microsoft com en us library system windows forms webbrowser aspx在我的 WinForms 应用程序中 并意识
  • 是否有实用的理由使用“if (0 == p)”而不是“if (!p)”?

    我倾向于使用逻辑非运算符来编写 if 语句 if p some code 我周围的一些人倾向于使用显式比较 因此代码如下所示 if FOO p some code 其中 FOO 是其中之一false FALSE 0 0 0 NULL etc
  • 在一个平台上,对于所有数据类型,所有数据指针的大小是否相同? [复制]

    这个问题在这里已经有答案了 Are char int long 甚至long long 大小相同 在给定平台上 不能保证它们的大小相同 尽管在我有使用经验的平台上它们通常是相同的 C 2011 在线草稿 http www open std
  • 我可以使用 moq Mock 来模拟类而不是接口吗?

    正在经历https github com Moq moq4 wiki Quickstart https github com Moq moq4 wiki Quickstart 我看到它 Mock 一个接口 我的遗留代码中有一个没有接口的类
  • C#:帮助理解 UML 类图中的 <>

    我目前正在做一个项目 我们必须从 UML 图编写代码 我了解 UML 类图的剖析 但我无法理解什么 lt
  • 为什么 std::strstream 被弃用?

    我最近发现std strstream已被弃用 取而代之的是std stringstream 我已经有一段时间没有使用它了 但它做了我当时需要做的事情 所以很惊讶听到它的弃用 我的问题是为什么做出这个决定 有什么好处std stringstr
  • 等待进程释放文件

    我如何等待文件空闲以便ss Save 可以用新的覆盖它吗 如果我紧密地运行两次 左右 我会得到一个generic GDI error
  • 动态添加 ASP.Net 控件

    我有一个存储过程 它根据数据库中存储的记录数返回多行 现在我想有一种方法来创建 div 带有包含该行值的控件的标记 如果从数据库返回 10 行 则 10 div 必须创建标签 我有下面的代码来从数据库中获取结果 但我不知道如何从这里继续 S
  • 将 MQTTNet 服务器与 MQTT.js 客户端结合使用

    我已经启动了一个 MQTT 服务器 就像this https github com chkr1011 MQTTnet tree master例子 该代码托管在 ASP Net Core 2 0 应用程序中 但我尝试过控制台应用程序 但没有成
  • 如何在非控制台应用程序中查看 cout 输出?

    输出到调试窗口似乎相当繁琐 我在哪里可以找到cout如果我正在编写非控制台信息 则输出 Like double i a b cout lt lt b lt lt endl I want to check out whether b is z
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 使用 .NET Process.Start 运行时挂起进程 - 出了什么问题?

    我在 svn exe 周围编写了一个快速而肮脏的包装器来检索一些内容并对其执行某些操作 但对于某些输入 它偶尔会重复挂起并且无法完成 例如 一个调用是 svn list svn list http myserver 84 svn Docum
  • 当从finally中抛出异常时,Catch块不会被评估

    出现这个问题的原因是之前在 NET 4 0 中运行的代码在 NET 4 5 中因未处理的异常而失败 部分原因是 try finallys 如果您想了解详细信息 请阅读更多内容微软连接 https connect microsoft com
  • 从列表中选择项目以求和

    我有一个包含数值的项目列表 我需要使用这些项目求和 我需要你的帮助来构建这样的算法 下面是一个用 C 编写的示例 描述了我的问题 int sum 21 List

随机推荐

  • 如何通过 php 从文件中提取特定字符串(电子邮件)[重复]

    这个问题在这里已经有答案了 我有一个文本文件 其中包含有关组织专家的一些成员信息 现在我只想从中提取电子邮件地址 示例文件 email protected cdn cgi l email protection jhgvhdhf email
  • 整数区间内的哈希表键

    我不知道这是否可能 但我正在尝试创建一个哈希表 其中 Interval 是一个具有 2 个整数 长值 一个开始和一个结束的类 我想做这样的事情 Hashtable
  • 如何在 Jitpack 上使用 maven 发布 Kotlin 库的 KDoc?

    背景 经过大量的研究和尝试 并寻求帮助 我成功地在 Jitpack 上使用 maven 发布了一个私有的 Github 存储库 写为here https stackoverflow com a 67071394 878126 因此 目前我放
  • Spring 类加载应用程序上下文

    我有一个 Spring Web 项目 我需要在初始化应用程序上下文后加载一些类 因为这些类最终将在将来使用 因此 我尝试在使用前预加载它们以提高性能 怎么做 请帮忙 Thanks 要将一个类加载到 JVM 中 只需调用Class forNa
  • 修改对象的键而不创建新对象[重复]

    这个问题在这里已经有答案了 我有以下输入 foo 4 bar 3 我想修改这个对象的键以获得 x foo y 4 x bar y 3 是否可以修改对象而不创建新对象 可用 jQuery 是的 您只需添加新密钥并删除旧密钥即可 obj x f
  • 为什么我们不能像其他模式对象一样删除引用的类型

    When a Type尝试删除或替换有依赖项的情况下 oracle 会抛出以下错误 与其他模式对象 如过程 不同 在其他模式对象中 您删除一个对象 然后它就会被删除 并且依赖对象也会被删除invalid 我的两个问题是 1 为什么是Type
  • 在 Sqlite 中存储 NSMutableArray

    我有一个 NSMutableArray 其中包含多个 CGRect 的坐标和大小 我想将其存储到 sqlite 中 是否可以存储整个数组 或者我应该将 CGRect 手动存储在数据库中 UPDATE 这是我从数据库检索到的数据 62706c
  • 为什么原始数据类型可以在不包含 System 命名空间的情况下工作?

    我读到所有原语都属于System命名空间 如果我评论掉using System我预计我的程序中会出现构建错误 但它运行成功 为什么是这样 这是因为int是一个别名System Int32 并且由于 Int32 已经以其名称空间为前缀 即 完
  • 如何捕获 C 函数调用的 Haskell 回调函数中引发的 Haskell 异常?

    有没有什么好方法来捕获由c函数调用的haskell回调函数中引发的haskell异常 例如 让我有一个简单的 c 函数 它只调用给定的回调 void callmeback void callback callback 以及通过 ffi 使用
  • 在Linux和Windows机器上使用C++调度任务

    我正在开发网关模拟器应用程序 网关将视频流式传输到客户端 网关模拟器可以模拟 1000 个网关 用户可以发出命令 例如 1 小时后开始录制并录制长达 1 小时 或者可以流式传输视频5点钟 所以基本上安排了任务 该网关将在 Windows 和
  • 带 Y 组合器的列表函数没有递归,为什么?

    注意 这是一种家庭作业 而不是一种家庭作业 最终目标是拥有一个函数 该函数生成一组数字的幂集 以数字列表的形式提供给该函数 我有该函数的递归版本 但我现在需要找到一些方法来替换我拥有的解决方案中的每个显式递归函数 append mapm等
  • 64 位计算机上的 32 位程序不会因 NullReferenceException 而崩溃

    我有一段代码抛出一个NullReferenceException dataSource DataSource GetView 它抛出是因为dataSource is null GetView返回一个DataTable 但是 当在一台计算机
  • Ruby 中的一行 if 语句

    我有以下代码 if day gt 31 day 31 month April end 我可以把它写在一行中 而不是 if day gt 31 then day 31 and month April end 我试过这样 if day gt 3
  • 使用VideoJS播放器播放RTMP流

    我正在尝试玩RTMP流式传输VideoJS玩家 下面是我的代码
  • Wildfly 9 http 转 https

    我想将请求从 HTTP 重定向到 HTTPS 我正在使用 Wildfly 9 经过谷歌搜索后 我发现了以下内容 但它不起作用 我希望有人
  • 如何在 Java 中将 BigInteger 值转换为十六进制

    我正在制作一个Java程序 我有一个 BigInteger 数字 我需要将其转换为十六进制 我尝试了以下代码 String dec null System out println Enter the value in Dec Buffere
  • 更改特定数据的颜色

    我想更改 json 文件中某些数据的颜色 如果我有一个包含日期的数据集 并且我想要 2017 年的日期为浅粉色 我怎样才能在不影响2018年 2019年等的情况下实现这一目标 日期 json文件 id 1 month 2017 03 01
  • 大型 XML 文件和分页,可能吗?

    问题 当在您的计算机上本地打开非常大的 XML 文件时 几乎可以肯定的是 该文件需要一段时间才能打开 这通常意味着您的计算机因认为没有响应而被锁定 如果您为用户提供他们使用的相当复杂的数据库或系统的 XML 备份 这就是一个问题 他们能够打
  • WPF - 如何保存没有任何 Alpha 通道的 PNG?

    我有一个BitmapSource 我将它保存为像这样的png PngBitmapEncoder enc new PngBitmapEncoder enc Frames Add myBitmapSource enc Save fs 如何在没有
  • C 中自动 stdout 缓冲区刷新的规则是什么?

    我只是好奇应该满足哪些条件才能自动刷新标准输出缓冲区 首先 我很困惑这个伪代码不会在每次迭代时打印输出 while 1 printf Any text sleep 1 但如果我添加换行符 它就会 经过几次实验 我发现在我的机器上标准输出缓冲