我对C语言中的写入操作感到困惑。我有一个字符串s,想要将其写入输出。为此,我使用fputs函数:
fputs(s, stdout);
但是显然这并不是直接写入输出,而仅仅是收集要写入的数据?它到底收集在哪里呢?所以我必须等待程序退出或者调用fflush()函数,才能实际将输出写入标准输出(stdout)中?我的理解正确吗?
C标准IO流有三种模式:
您可以使用setvbuf()函数设置模式。所有这些都在标准IO实现的深层内部发生。如果您希望立即显示数据,请使用不带缓冲的模式。
引用C99 7.19.3#3:
当一个流是“无缓冲”的,字符将尽快从源或目的地中显示。否则,字符可以累积并作为块传输到或从主机环境中。当一个流是“完全缓冲”的时,只有在填满缓冲区后字符才会被传输到或从主机环境中传输。当一个流是“行缓冲”的时,只有在遇到换行符时字符才会被传输到或从主机环境中传输。此外,在需要从主机环境传输字符的行缓冲流上请求输入时,字符应被作为块传输到主机环境。这些特性的支持是实现定义的,并且可能会通过setbuf和setvbuf函数受到影响。
\n
。 - Paulo Bufputs
,您将看到它的工作原理。不过这可能相当困难。 - Jabberwocky