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