2017-02-12 33 views
0

我正在使用popen在我的應用程序中打開另一個進程並解析其輸出。我希望在計劃完成任何輸出後立即收到通知。目前,我的程序中的所有內容均使用epoll進行此類操作。現在popen確實會給我一個FILE *而不是fd。使用fileno函數並將得到的fd放入epoll會節省嗎?如果不是,還有其他方法嗎?我不希望這個過程阻止,這就是爲什麼我想要通知。在epoll中使用FILE *

+0

我建議不要混合緩衝的I/O('FILE *')和(e)輪詢。就我個人而言,我只會寫我自己的'popen_fd',它返回一個描述符,你可以從'read'中讀取。 – melpomene

回答

0

是的,它是安全的,只要你不用文件描述符做任何額外的事情,不用小心它似乎是安全的。還有一件事是,你可能想把文件描述符標記爲非阻塞。所以你可以read()沒有阻止和處理EBUSYEAGAIN檢查errno

+0

我同意你在FILE *接口的文件描述符上使用'epoll()'是安全的 - 它只是將描述符返回爲活動狀態。但是*將文件描述符標記爲非阻塞*?如果實際閱讀是通過問題中提到的基於FILE *的stdio函數完成的,我不認爲這是安全的。標記「FILE *」的底層文件描述符非阻塞可能會導致嚴重的問題,因爲庫調用幾乎肯定不會使用非阻塞描述符。 –