首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >fputs和fflush,写和缓冲过程

fputs和fflush,写和缓冲过程
EN

Stack Overflow用户
提问于 2014-02-27 17:58:06
回答 1查看 2.7K关注 0票数 4

我对C中的写入处理方式感到困惑,所以我有一个字符串,s,我想要写入输出。为此,我使用fput:

代码语言:javascript
复制
fputs(s, stdout);

但是很明显,这并不是写到输出,而是仅仅收集数据进行写入吗?它到底是在哪里收集的?因此,我必须等到程序退出,或者直到调用fflush(),直到输出实际写入stdout?我说的对吗?

EN

回答 1

Stack Overflow用户

发布于 2014-02-27 21:38:01

C标准IO流以三种模式之一运行:

  1. 全缓冲
  2. 线路缓冲
  3. 无缓冲

您可以使用setvbuf()函数设置模式。这一切都发生在标准IO实现的核心部分。如果希望立即显示数据,请使用非缓冲模式。

引用C99 7.19.3#3的话:

当流未缓冲时,字符将尽快从源或目的地出现。否则,字符可以作为块累积和传输到或从主机环境中传输。当流被完全缓冲时,当缓冲区被填充时,字符将作为块传送到或从主机环境中传输。当流被缓冲时,当遇到新行字符时,字符将作为块传送到或从主机环境中传输。此外,当缓冲区被填充时,当输入被请求到非缓冲流时,或者在需要从主机环境传输字符的行缓冲流上请求输入时,字符打算作为块传输到主机环境。对这些特性的支持是实现定义的,并且可能通过setbufsetvbuf函数受到影响。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22076566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档