【发布时间】:2014-12-31 12:28:49
【问题描述】:
一定很简单,但我听不懂。
这是一个写入标准输出的简单 C 程序:
root@oceanLondon:~/tst# cat tst.c
#include <stdio.h>
#include <unistd.h>
int
main(int argc, char **argv)
{
for (; ;) {
printf("Hello world!\n");
sleep(1);
}
return 0;
}
现在,如果我想将输出写入我的屏幕和文件:
root@oceanLondon:~/tst# ./tst |tee file
它只是不起作用,我有空屏幕和空文件。
如果我执行的程序退出,那么它可以完美运行,例如
root@oceanLondon:~/tst# ls |tee file
Makefile
file
qq
tst
tst.c
tst.o
root@oceanLondon:~/tst# cat file
Makefile
file
qq
tst
tst.c
tst.o
root@oceanLondon:~/tst#
这是某种缓冲问题吗?有人可以帮我做一个延续计划吗?
【问题讨论】:
-
如果你尝试
fflush(stdout);? -
@fredtantini:那么它确实有效。真的很简单。谢谢 - 请随时将其发布为答案。
-
似乎有一些有用的答案here。 (我现在不在 Linux 机器上,所以无法试用。)
-
@fredtantini 作为这个问题的唯一答案已被删除,也许你应该发布一个。
-
标准输出在直接到终端时通常是行缓冲的。当它进入管道时,它通常是完全缓冲的。您可以在每次迭代中使用
fflush(),也可以调用setvbuf()使标准输出行显式缓冲。