fputs和fflush,写入和缓冲过程

时间:2014-02-27 17:58:06

标签: c buffer stdio

我对写入处理如何进入C感到困惑。所以我有一个字符串s,我想写入输出。为此,我使用fputs:

fputs(s, stdout);

但显然这不会写入输出,而只是收集数据进行写入?究竟在哪里收集?所以我必须等到程序退出或直到我调用fflush()直到输出实际写入stdout?我是对的吗?

1 个答案:

答案 0 :(得分:2)

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

  1. 完全缓冲
  2. 行缓冲
  3. 无缓冲
  4. 您可以使用setvbuf()功能设置模式。这一切都发生在标准IO实现的内部深处。如果您希望立即显示数据,请使用无缓冲模式。

    引自C99 7.19.3#3:

      

    当流 unbuffered 时,字符应从中显示       来源或尽快到达目的地。否则字符可能是       作为块累积并传输到主机环境或从主机环境传输。当一个       流是完全缓冲的,字符旨在传输到或来自       填充缓冲区时作为块的主机环境。当流行时       缓冲,字符旨在传输到主机或从主机传输       环境作为遇到换行符时的块。此外,       字符旨在作为块传输到主机环境       填充缓冲区时,在未缓冲的流上请求输入时,或       当在需要传输的线路缓冲流上请求输入时       来自主机环境的字符。支持这些特征是       实现定义,可能会受到setbufsetvbuf函数的影响。