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和隨後循環而沒有任何另外的輸出。
如果有人能對此有所瞭解,我將不勝感激。