我有两个进程通过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()
的返回值,但我认为这不是使用此函数的正确方法。
啊,有一件事:我在stackoverflowz上找到了POLLHUP技巧。它有效但很活泼,因此不适合我的情况......
问候