[英]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.