C++ 缓冲流 IO

2023-11-22

据我了解,默认情况下,C++ 支持的所有流 IO 都会被缓冲。

这意味着要输出的数据被放入缓冲区,直到缓冲区满,然后发送到输出设备,类似地,对于输入,一旦缓冲区为空,就会读取数据......所有这些都完成了,这样就减少了昂贵的系统数量可以尽量减少通话次数。

但如何在行动中验证这种行为。我的意思是考虑下面的代码

int main()
{
    cout << "Hello world\n";
    return 0
}

缓冲在哪里出现?我知道有缓冲发生,但如何解释呢?输出会立即在屏幕上看到,那么实际查看缓冲 I/O 的代码示例是什么?


首先,并不是所有的iostream都被缓冲;缓冲由附加的处理streambuf。如果是filebuf(由ifstream and ofstream),输入将读取尽可能多的内容,直到大小 缓冲区,并且输出将在溢出时刷新缓冲区,当 显式刷新或关闭发生,或者当对象被破坏时(其中 隐式调用 close)。

的情况下cout有点特别,因为它永远不会被破坏,也不会 关闭。有系统保证flush将 之后至少调用过一次exit被称为(这就是发生的事情 当你从main)。这意味着之前的任何输出 从 main 返回将被刷新;如果你正在使用cout在 静态对象的析构函数,您仍然需要显式刷新 当然。

也可以tie输出流到输入流;coutcin默认情况下。在这种情况下,任何尝试输入 绑定的流将刷新输出。

通常的约定是只使用std::endl而不是简单地 输出'\n'; std::endl输出一个'\n'然后冲洗 溪流。对于所有输出都出现非常重要的流 立即,有一个unitbuf可以设置的标志,这意味着 该流将在每个结束时被刷新<<操作员。 (std::cerr默认情况下有此设置。)

最后,如果你想看到缓冲的效果,输入类似sleep(10)在你的输出之后。如果立即出现输出,则已 酡;如果没有,则已被缓冲,并且发生刷新 隐含地在sleep.

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

C++ 缓冲流 IO 的相关文章

随机推荐

  • 如何在kafka中创建新的消费者组

    我按照快速入门指南上的说明在本地运行 kafkahere 然后我在中定义了我的消费者组配置config consumer properties这样我的消费者就可以从定义的中选择消息group id 运行以下命令 bin kafka cons
  • 在 Twitter Bootstrap 的 ScrollSpy 中,我到底可以在哪里放置 data-spy="scroll" ?

    文档上说得很清楚 只需将 data spy scroll 添加到您想要监视的元素 最典型的是主体 但看来只有戴在身上才能发挥作用 当我将其放入我想要监视的任何其他元素时 导航的最后一个元素将被选中 Here它在身体上 并且有效 并且this
  • 默认打印 XSLT 1.0 文本节点

    我看过XSL xsl 模板匹配 但那里没有提到触发我的问题的匹配模式 我有一个相当复杂的 XML 结构
  • 使用openGL截屏并保存为png

    我正在尝试截取全屏屏幕截图并将其另存为 png 格式 我找到了一个代码here并对其进行了一些修改 对于屏幕截图 我使用 openGL 和 Glut 并使用 c 的 gd 库以 png 格式保存 我得到的只是一张黑色的 png 我不明白为什
  • Google Chrome 扩展开发中的 ES6 模块(意外标记)

    是否可以在 Google Chrome 扩展开发中使用 ES6 模块 我收到 意外的令牌导出 或 意外的令牌导入 好吧 您可以在 Chrome 的兼容性表中看到 并非所有内容都可用 Chrome 擅长在每个版本中添加 ES6 功能 但目前不
  • datatrigger 绑定到 viewmodel 属性

    我正在尝试创建一个简单的样式数据触发器 该触发器从视图模型属性中提取其绑定值 如下所示
  • Android - 从密钥库导出单个密钥/别名

    我有一个密钥库 JKS 其中包含不同应用程序的许多密钥条目 别名 现在 一个应用程序将移至另一位开发人员 我想为他导出 提取单个密钥 别名 gt keytool exe list keystore Keystorefile Keystore
  • 在 Linq to SQL 中设置外键

    众所周知 如果实体已加载 则无法直接在 Linq to SQL 中设置外键 ID 但是 您可以通过外键查找实体 然后使用实体关系将实体设置为外部实体 为了简单起见 我在这里取出了枚举并使用整数值 即 如果我有一个已加载的约会实体和关联的 A
  • 对 pthread_create 的未定义引用

    我有这个代码 include
  • Android 中 raw 和 asset 文件夹的存储限制

    我想将一些视频 音频文件存储在我的应用程序的原始文件夹中 我不知道 raw 和 asset 文件夹的存储限制 谁能告诉我可以在原始文件夹和资产文件夹中存储多少数据 另外 如果我将大量数据存储在这些文件夹中 是否会影响执行速度或从市场下载的应
  • 非托管 DLL 无法在 ASP.NET 服务器上加载

    这个问题涉及一个 ASP NET 网站 最初是在 VS 2005 中开发的 现在是在 VS 2008 中开发的 该网站使用两个非托管外部 DLL 它们不是 NET 我没有编译它们的源代码 必须按原样使用它们 该网站在 Visual Stud
  • 我如何理解 fdump-class-hierarchy 输出

    我正在使用 fdump class hierarchy 编译器选项 但我不知道如何理解输出 大小 对齐 基本大小 和 基本对齐 是什么意思 它们是如何计算的 谢谢 当代码为 class A public private double m n
  • MOTODEV Studio 与 Android Google 插件 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 有人有什么意见 经验 建议
  • 如何在不使用 ping 的情况下检查 Web 服务是否已启动并正在运行?

    我如何检查 Web 服务中的方法是否正常工作 我无法使用 ping 我仍然想检查客户端从 Web 服务调用的任何类型的方法 我知道这很难一概而论 但应该有某种方法 我使用这个方法并且效果很好 public bool IsAddressAva
  • 致命错误:numpy/arrayobject.h:没有这样的文件或目录

    我能分享的内容有限 因为这是我从 Ubuntu 14 04 移植到 16 04 的大量代码的一部分 这应该是微不足道的 但不知怎的 我正在为此苦苦挣扎 没找到numpy arrayobject h我在源文件中引用 include
  • UTF-8 是目前非 ASCII 字符 QR 码的首选编码吗?

    Google 使用 UTF 8 作为其非常流行的编码器的默认值 据我所知 他们甚至没有添加字节顺序标记 问题是大多数扫描仪似乎仍然使用 JIS8 QR 2000 而不是默认的 iso 8859 QR 2005 因此使用 iso 8859 进
  • 如何刷新我从 iOS 中的 google oauth 2.0 获得的令牌

    我正在制作一个 iOS 应用程序 它使用用户的 google 帐户从他的 YouTube 帐户获取数据并向他们显示 第一步是使用 gtm2 对用户进行身份验证并获取访问令牌和刷新令牌 问题是访问令牌在 60 分钟后过期 我必须再次登录并允许
  • 以编程方式多次更改操作栏颜色

    我在用 getSherlockActivity getSupportActionBar setBackgroundDrawable new ColorDrawable 0xff00ACED 要更改片段中操作栏的颜色 它可以工作 但是 如果我
  • 如何在sql server 2005中获取x和y之间的日期表

    我只是想要一种快速的方法 最好不使用 while 循环 创建日期 x 和日期 y 之间的每个日期的表 这样我就可以将外部连接保留到一些统计表 其中一些统计表没有某些记录之间的天数 允许我用 0 标记缺失的天数 严格来说 这并不能完全回答你的
  • C++ 缓冲流 IO

    据我了解 默认情况下 C 支持的所有流 IO 都会被缓冲 这意味着要输出的数据被放入缓冲区 直到缓冲区满 然后发送到输出设备 类似地 对于输入 一旦缓冲区为空 就会读取数据 所有这些都完成了 这样就减少了昂贵的系统数量可以尽量减少通话次数