1

我写了以下编:

int main() 
{
printf("one\n");
write(1, "two\n", 4);
return 0;
}

然后我给出命令 ./a.out | cat 在终端上的输出是二一而不是一二为什么???

4

2 回答 2

11

那是因为printf' 的输出会被libc,write的输出缓冲。这是对文件(stdout)的直接、无缓冲操作

这个

如果 stdout 是终端,则缓冲自动设置为行缓冲,否则设置为缓冲

所以,你实际上是在管道cat- 这就是启用缓冲的原因(尽量不要cat看到)

要关闭缓冲,请发出以下stdbuf命令:

stdbuf -o0 ./a.out  | cat 

顺便说一句,对于那些不是日常 C 黑客的人来说,这是一个非常好的问题!简单明了!

于 2013-04-27T23:44:05.543 回答
4

正如 hek2mgl 指出的那样,这是因为缓冲。如果你想强制的话,你可以把它放在fflush(stdout)后面。printf

于 2013-04-27T23:53:39.990 回答