This question was migrated from Unix & Linux Stack Exchange because it can be answered on Stack Overflow. Migrated四年前。Learn more。
我有一个文件描述符(基本上是套接字描述符)示例sockfd。我用dup2命令
(无效)dup2(sockfd,0);
然后关闭描述符close(sockfd);
现在我尝试在receive recv上接收消息(0,buf,sizeof(buf),0);
但它不起作用有什么问题吗?
最佳答案
dup2
不返回void
,它返回int
,因此应检查其返回代码。如果dup2
由于某种原因失败,而这就是问题所在,那么您就不会知道它。也就是说,dup2
通常总是有效的。
有一个角落的情况可能会导致你所看到的:如果sockfd
已经是0。然后您将dup2
从0到0,然后关闭0,这样就完全没有文件描述符了。因此,在使用dup2
检查您试图重新编号的文件描述符是否已经正确编号之前,这是一个很好的实践。但是,在您的情况下,这不太可能比sockfd
开始时是0。
也就是说,你要做的应该是有效的。如果不是,那么没有人可以回答你的问题,除非你澄清你所说的“它不起作用”。
关于linux - 使用dup2复制文件描述符,然后使用close将其关闭,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29667870/
10-11 14:37