我的程序正在控制Linux上的外部應用程序,通過管道將輸入命令傳遞到外部應用程序stdin,並通過外部應用程序stdout的管道讀取輸出結果。有沒有辦法將Linux管道設置爲非緩衝或線路緩衝?
問題是寫入管道是按塊緩存,而不是按行存放,因此延遲發生在我的應用程序接收到外部應用程序輸出的數據之前。無法更改外部應用程序以添加顯式fflush()調用。
當我的外部應用程序設置爲/斌/貓-n(它回顯輸入,添加了行號),它工作正常,現在看來,在每行後貓刷新。強制外部應用程序刷新的唯一方法是將退出命令給它;當它收到命令時,它會刷新,所有答案出現在stdout上,就在退出之前。
我很確定,Unix管道是適合那種進程間通信(僞服務器客戶端)的解決方案,但也許我錯了。
(我剛剛複製了一個類似的問題,一些文字:Force another program's standard output to be unbuffered using Python)
這是另一個優秀的Linux緩衝討論: http://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe – AAAfarmclub