簡體   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