我对写入处理如何进入C感到困惑。所以我有一个字符串s,我想写入输出。为此,我使用fputs:
fputs(s, stdout);
但显然这不会写入输出,而只是收集数据进行写入?究竟在哪里收集?所以我必须等到程序退出或直到我调用fflush()直到输出实际写入stdout?我是对的吗?
答案 0 :(得分:2)
C标准IO流以三种模式之一运行:
您可以使用setvbuf()功能设置模式。这一切都发生在标准IO实现的内部深处。如果您希望立即显示数据,请使用无缓冲模式。
引自C99 7.19.3#3:
当流 unbuffered 时,字符应从中显示 来源或尽快到达目的地。否则字符可能是 作为块累积并传输到主机环境或从主机环境传输。当一个 流是完全缓冲的,字符旨在传输到或来自 填充缓冲区时作为块的主机环境。当流行时 缓冲,字符旨在传输到主机或从主机传输 环境作为遇到换行符时的块。此外, 字符旨在作为块传输到主机环境 填充缓冲区时,在未缓冲的流上请求输入时,或 当在需要传输的线路缓冲流上请求输入时 来自主机环境的字符。支持这些特征是 实现定义,可能会受到
setbuf
和setvbuf
函数的影响。