У меня есть два процесса, которые общаются через pty, не блокируя. Проблема в том, что fread()
на мастере дает сбой, когда нет данных, доступных для обработки.
Как я могу игнорировать случай «нет данных для чтения/данных» при чтении из несвязанного файлового дескриптора на главной стороне? Я подозреваю, что есть какой-то флаг для open()
или fcntl()
, который я пропустил во время чтения?
// initialization:
int pty_fd = posix_openpt(O_RDWR | O_NOCTTY);
int rc = grantpt(pty_fd);
rc = unlockpt(pty_fd);
fcntl(pty_fd, F_SETFL, O_NONBLOCK);
fd_read = fdopen(pty_fd, "r");
// now, trying to read will fail if no data is present:
char buf[100];
int count = sizeof(buf);
size_t bytesRead = fread(buf, sizeof(char), count, fd_read);
if ((bytesRead == 0) && (ferror(fd_read)) {
printf("fail...\n");
}
Конечно, я могу игнорировать возвращаемое значение ferror()
, но я полагаю, что это неправильный способ использования этой функции.
Ах, одно: я нашел трюк POLLHUP на stackoverflowz. Это работает, но колоритно и, следовательно, не подходит для моего случая...
Привет
ferror()
не соответствует действительности... - person klsdjfhsalkjfhl   schedule 19.01.2016