next up previous
Next: 在 C 程式中要怎麼用 sleep() 才能夠 sleep 小於一秒? Up: 自以為已經知道所有答案的人可能會問的高級問題 Previous: 一個執行中的程式如何知道自己的 pathname?

如何用 popen() 對一個 process 做讀寫的動作?

用 pipe 把一個 process 的輸出、輸入轉給任意的 process 所可能會發生的 問題就是 deadlock,譬如這兩個 processes 剛好同時都在等待「尚未產生」 的輸入時。唯一能避免 deadlock 的方法就是在 pipe 的兩端都要遵循嚴格的  deadlock-free 協定,但是需要這些 processes 之間的互相合作才能達成, 而對於像 popen() 這類的函數來說並不太適合。

在 'expect' 這個軟體中附有一個能夠讓 C 程式直接引用的函式庫。其中有 一個函式不管是在讀或寫都能達到和 popen 相同的功能。但是這個函式是使 用 ptys 而不是 pipes,也沒有 deadlock 的問題,並且在 BSD 或 SV 中都 能使用。若想對 'expect' 有進一步的瞭解,可參考下一個問題的解答。



Tan Koan-Sin
1999-03-02