next up previous
Next: 我要如何在檔案名字中加入日期? Up: 中級的問題 Previous: 要怎樣才能避免在記憶體中留下 zombie processes?

當我要從 pipe 讀一行輸入時,要如何才能讓這行資料像是直接從鍵盤輸 入而非從一個大 block buffer 來的?

stdio 這個 library 會自己判斷它是否是在 tty 下執行,並藉以決定採用何種  buffering 方式。如果它認為是在 tty 模式下,那麼它就會以一次一行來做  buffering;反之,則用一個較大的 buffer 而非一行一行的做。

如果你能拿到你所想要取消 buffering 的軟體的原始程式,那麼你就可以用 setbuf() 或 setvbuf() 來改變 buffering 的方式。

如果你無法拿到原始程式,那麼你就只能試著去說服這個正在 pty 下執行 的程式,讓它以為它是在 tty 下執行。例如,用先前在問題 3.9 中所提過 的 pty 程式。



Tan Koan-Sin
1999-03-02