我写了以下编:
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