2016-07-07 92 views
3

在C程序中,我想從標準輸入讀取文本行。 同時我想處理來自另一個文件描述符的數據。以非阻塞方式讀取文本行

我試着用poll來等待這兩個源中的任何一個變得可讀並相應地處理它們。然而,民意調查需要裸文件描述符和閱讀整個行像fgets我需要一個文件句柄。

我可以使用filenofdopen來「轉換」它們,但是以混合方式使用兩者似乎不是一個好主意。

因此,有沒有一種很好的方式來等待文本行而不會阻塞或線程?

+0

爲什麼不使用像'read()'這樣的系統調用來從標準輸入讀取? – MikeCAT

+0

'read'不容易讀取直到行尾。這意味着我需要實現我自己的類似於FILE的緩衝基礎設施。 – michas

+0

'fdopen'對我來說看起來是正確的。你試過了嗎? –

回答

0

你可以使用任何你想要的多路複用(select(),poll(),epoll_wait())。但是你不應該從stdinfgets()讀取,因爲複用不知道我們是否有完整的行或不行。所以在某些情況下可能會阻止。您應該編寫自定義行讀取功能,這將指示還沒有完整行,並立即返回。