man 2 select
在BUGS部分提到:
在Linux下,当数据已经到达但检查和丢弃时,select()可能会将套接字文件描述符报告为“准备好读取”,而随后的读取却被阻塞。文件描述符被错误地报告为就绪的情况可能还有其他情况。因此,在不应该阻塞的套接字上使用O_NONBLOCK可能更安全。
因此,我的read
调用不能阻塞,因此我已经将我的管道文件描述符标记为O_NONBLOCK
。然而,我希望write
调用在写入管道时阻塞,直到数据被写入。
是否可能使write
在向管道写入数据时阻塞,但read
不会阻塞读取端?例如,在管道创建后仅对一个端点调用fcntl
是否合法,因为读取和写入端点具有单独的文件描述符?