2011-11-28 18 views
0

我已經閱讀了關於此事的所有信息,但不幸沒有一點幫助。我已經寫了這個小功能龜etc的非阻塞版本:poll()在第一次調用後停止設置POLLIN

char nonblocking_fgetc(FILE *stream){ 
    static struct pollfd pfd; 
    pfd.fd = fileno(stream); 
    pfd.events=POLLIN; 
    poll(&pfd, 1, 1); 
    return ((pfd.revents&POLLIN)?fgetc(stream):-1); 
} 

該函數返回一個字符,如果它存在於stream,或否則爲-1。它按照預期的第一次通話。但是,任何後續調用都會返回-1。

上面的功能是清理版本。我的版本有很多檢查輪詢錯誤的測試。虛設POLLERR已設置或返回負值。

例如: 主要包含此小while循環:

while(1){ 
    c=nonblocking_fgetc(stdin); 
    if (c!=-1) {fputc(c, stdout);fflush(stdout);} 
}  

運行echo "Test" | ./a.out將產生只有T和隨後循環而沒有任何另外的輸出。

如果有人能對此有所瞭解,我將不勝感激。

回答

3

<stdio.h>文件流是緩衝。有關更多信息,請參閱setbuf。您可以直接使用read系統調用。

相關問題