当前位置: 技术问答>linux和unix
重定向输出遇到的缓冲问题
来源: 互联网 发布时间:2016-12-29
本文导语: #include int main() { int i; #if 0 setvbuf(stdout, NULL, _IONBF, 0); #endif for (i=0; i a.txt 然后看a.txt,有可能根本没有任何输出,有可能只有一部分输出,不太可能出现直到999的完整输出。原因当然是重定向输出的缓冲...
#include
int main()
{
int i;
#if 0
setvbuf(stdout, NULL, _IONBF, 0);
#endif
for (i=0; i a.txt
然后看a.txt,有可能根本没有任何输出,有可能只有一部分输出,不太可能出现直到999的完整输出。原因当然是重定向输出的缓冲机制。如果把代码里面的#if 0改成#if 1,设置为无缓冲,那即使a.out不结束也可以看到完整的输出。
我的问题是:如果不改代码,在存在缓冲的前提下,有没有什么其他办法在a.txt里面得到完整的包括999的所有输出文本。比如给这个进程发某种信号,甚至把它kill掉都可以。
谢谢!
|
参考一下apue中关于伪终端的部分
用伪终端的方式执行你的程序,这样对它来说就和在命令行直接启动的一样,输出是终端,那时应该是行缓冲了
用伪终端的方式执行你的程序,这样对它来说就和在命令行直接启动的一样,输出是终端,那时应该是行缓冲了
|
for (i=0; i