这一定很简单,但是我没能理解。
这是一个将内容输出到标准输出的简单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#
这是一种缓冲问题吗?有人能帮我在持续运行的程序上执行tee命令吗?
fflush(stdout);
会发生什么? - fredtantinifflush()
,或调用setvbuf()
显式地将标准输出设置为行缓冲。 - Jonathan Leffler