簡體   English   中英

C程序拒絕管道?

[英]C program refuses to pipe?

我試圖編譯原始Crowther / Woods FORTRAN巨大洞穴探險的1991 C端口。 該代碼是一團糟,但是在更改了某些部分后,它可以編譯並正常運行。

問題是,當我嘗試將其輸出通過管道傳輸到另一個程序或文件時,什么都沒有顯示。 ./adventure可以正常工作,但./adventure | cat ./adventure | cat什么也沒印。 掛接到fstat的調用沒有任何幫助。

程序是否還有其他方法可以檢測管道並進入靜默模式? 甚至添加printf("Hello World"); 因為main函數的第一行不會導致任何內容通過cat出現。

編輯:我使用的是吉姆·吉洛格利(Jim Gillogly)的版本,但是我從源頭獲得的鏈接已經爛了。 我會找到另一個下載鏈接。

正如現有評論所言,stdout可能是塊緩沖的,因為它不再向終端開放。 嘗試添加呼叫:

setvbuf(stdout, NULL, _IOLBF, 0);

在程序開始的某個地方。 這會將stdout更改為行緩沖模式,該程序將在程序寫入換行符后立即刷新輸出。

在Linux上,您也可以嘗試使用stdbuf從命令行更改緩沖區模式(而不是更改程序)(盡管顯然,應用程序中的任何setvbuf調用都將覆蓋此設置)。 例如,您可以嘗試:

stdbuf -oL ./adventure | cat

使用unbuffer (與expect )和script也可以實現類似的效果。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM