如果我复制了一个文件描述符,我可以让一侧阻塞和一个非阻塞
我已经通过打开一个套接字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导致reader和writer非阻塞(它在 I/O 对象上设置它)还是fcntl在文件描述符上设置非阻塞?
回答
如果您fcntl仔细阅读手册页,您会看到状态标志与文件描述相关联,而不是文件描述或. 并且dup说,新的和旧文件DESCRIPT或指向同一个文件DESCRIPT离子。所以访问reader和访问都writer应该是非阻塞的。