我写了以下编:
int main()
{
printf("one\n");
write(1, "two\n", 4);
return 0;
}
然后我给出命令 ./a.out | cat 在终端上的输出是二一而不是一二为什么???
那是因为printf
' 的输出会被libc
,write
的输出缓冲。这是对文件(stdout)的直接、无缓冲操作
读这个:
如果 stdout 是终端,则缓冲自动设置为行缓冲,否则设置为缓冲
所以,你实际上是在管道cat
- 这就是启用缓冲的原因(尽量不要cat
看到)
要关闭缓冲,请发出以下stdbuf
命令:
stdbuf -o0 ./a.out | cat
顺便说一句,对于那些不是日常 C 黑客的人来说,这是一个非常好的问题!简单明了!
正如 hek2mgl 指出的那样,这是因为缓冲。如果你想强制的话,你可以把它放在fflush(stdout)
后面。printf