立即将stdout重定向到fifo

时间:2013-03-10 05:26:58

标签: linux bash pipe fifo

例如,我有一个c程序打印三行,相隔两秒,即:

  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:我无法更改源代码。它实际上是一个桌面游戏算法的输出,我必须立即得到它,以便我可以将其插入另一个算法,得到答案并插入第一个......

3 个答案:

答案 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语言正确编写。