C - 标准输出打印指令

时间:2016-05-10 23:28:13

标签: c stdout

代码如下:

printf("u");
write(STDOUT_FILENO, "m", 1);
printf("d\n");

输出:泥

有人可以解释为什么按此顺序打印输出?

3 个答案:

答案 0 :(得分:3)

默认情况下,标准输出是行缓冲的,这意味着printf("u")只会将"u"放入其缓冲区,直到看到fflush或新行字符。要按顺序查看输出,请尝试以下操作:

printf("u");
fflush(stdout);
write(STDOUT_FILENO, "m", 1);
printf("d\n");

答案 1 :(得分:2)

printf将“u”存储在缓冲区中。 write将数据写入基础文件域。下一个printf将“d \ n”放入缓冲区。在将来的某个时刻(当程序退出时,或者当你调用printf足够缓冲区已满)时,缓冲区将被写入底层文件描述符。

答案 2 :(得分:1)

缓冲通过标准C流的输出。第一次调用printfu存储到缓冲区中,而第二行直接通过m系统将write输出到系统的标准输出文件句柄调用,最后第二次调用printf存储d和缓冲区中的换行符并将缓冲区刷新到系统标准输出句柄,因为输出是行缓冲的(如果是{{1},这通常是默认值) }与终端相关联)和FILE*导致刷新或因为程序正常终止时刷新流。

\n默认情况下是无缓冲的,请尝试:

stderr