Fread:没有数据的pty上的恐怖?

时间:2016-01-19 17:05:53

标签: c posix pty

我有两个进程通过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技巧。它有效但很活泼,因此不适合我的情况......

问候

0 个答案:

没有答案