Я прочитал всю информацию, которую нашел по этому вопросу, и, к сожалению, ничего из этого не помогает. Я написал эту маленькую функцию как неблокирующую версию fgetc:
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.
Вышеприведенная функция является очищенной версией. Моя версия имеет много тестов, которые проверяют ошибки опроса. Nether POLLERR установлен или возвращено отрицательное значение.
пример:
main содержит этот маленький цикл while:
while(1){
c=nonblocking_fgetc(stdin);
if (c!=-1) {fputc(c, stdout);fflush(stdout);}
}
выполнение echo "Test" | ./a.out
даст только T, а затем зациклится без дальнейшего вывода.
Буду признателен, если кто-нибудь сможет пролить свет на это.