代码如下:
printf("u");
write(STDOUT_FILENO, "m", 1);
printf("d\n");
输出:泥
有人可以解释为什么按此顺序打印输出?
答案 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流的输出。第一次调用printf
将u
存储到缓冲区中,而第二行直接通过m
系统将write
输出到系统的标准输出文件句柄调用,最后第二次调用printf存储d
和缓冲区中的换行符并将缓冲区刷新到系统标准输出句柄,因为输出是行缓冲的(如果是{{1},这通常是默认值) }与终端相关联)和FILE*
导致刷新或因为程序正常终止时刷新流。
\n
默认情况下是无缓冲的,请尝试:
stderr