printf("Wait 2 seconds...\n");
sleep(2);
printf("Two more\n");
sleep(2);
printf("Quitting in 2 seconds...\n");
sleep(2);
我执行程序并将其重定向到管道:
./printer > myPipe
在另一个终端上
cat < myPipe
第二个终端在6秒后立即打印所有内容!我希望它能立即打印出可用的线路。我该怎么办?
Obs:我无法更改源代码。它实际上是一个桌面游戏算法的输出,我必须立即得到它,以便我可以将其插入另一个算法,得到答案并插入第一个......
答案 0 :(得分:2)
将程序更改为此方法:
printf("Wait 2 seconds...\n");
fflush (stdout);
sleep(2);
printf("Two more\n");
fflush (stdout);
sleep(2);
printf("Quitting in 2 seconds...\n");
fflush (stdout);
sleep(2);
其他:
如果你无法改变程序,那么实际上没有办法影响程序的内置缓冲而不会破解它。
如果您可以重新链接该程序,则可以替换每次通话后刷新的printf()
功能。或者将stdout的启动初始化更改为无缓冲或至少是行缓冲。
答案 1 :(得分:1)
如果您无法更改来源,可能需要尝试一些此相关问题的解决方案: bash: force exec'd process to have unbuffered stdout
基本上,你必须让操作系统以交互方式执行这个程序。
答案 2 :(得分:1)
我假设实际的源文件已经完成。如果是这样,那么你必须编译源并运行它以使它做任何事情。使用cat
只会打印文件的内容,不运行它。
如果它是用bash编写的话那么它必须设置模式bit + x,然后才能使它成为可执行文件。允许您从终端./script
运行它不需要担心语法,因为你已经声明它不是一个改变它的选项......它用C语言正确编写。