如果我复制了一个文件描述符,我可以让一侧阻塞和一个非阻塞

我已经通过打开一个套接字connect并希望能够读取结果阻塞和写入非阻塞。我当前的解决方案是将文件描述符设置为非阻塞,然后select当我执行read.

做类似的事情会更简单

int sock = socket(...);
connect(sock, ...);
int reader = dup(sock);
int writer = sock;
fcntl(writer, F_SETFL, fcntl(writer, F_GETFL) | O_NONBLOCK);

是调用fcntl导致readerwriter非阻塞(它在 I/O 对象上设置它)还是fcntl在文件描述符上设置非阻塞?

回答

如果您fcntl仔细阅读手册页,您会看到状态标志与文件描述相关联,而不是文件描述. 并且dup说,新的和旧文件DESCRIPT指向同一个文件DESCRIPT离子。所以访问reader和访问都writer应该是非阻塞的。


以上是如果我复制了一个文件描述符,我可以让一侧阻塞和一个非阻塞的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>