繁体   English   中英

立即将stdout重定向到fifo

[英]Redirect stdout to fifo immediately

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

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

将程序更改为此方法:

  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的启动初始化更改为无缓冲 - 或者至少是行缓冲。

如果你不能改变源代码,你可能想尝试一些解决这个相关问题的方法: bash:强制exec'd进程有无缓冲的stdout

基本上,您必须使操作系统以交互方式执行此程序。

我假设实际的源文件已经完成。 如果是这样,那么你必须编译源并运行它以使它做任何事情。 使用cat只会打印文件的内容, 而不是运行它。

如果它是用bash编写的话那么它必须设置模式bit + x,然后才能使它成为可执行文件。 允许您从终端./script运行它

不必担心语法,因为你已经声明它不是一个改变它的选项......它用C语言写的正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM