使用dup2复制文件描述符,然后关闭它

时间:2015-03-19 11:52:40

标签: linux hp-ux

我有一个文件描述符(基本上是套接字描述符)示例sockfd。我使用dup2来命令 (void)dup2(sockfd,0);

然后我关闭描述符close(sockfd);

现在我尝试在接收recv(0,buf,sizeof(buf),0)时收到消息;

但是它的工作没有错呢?

1 个答案:

答案 0 :(得分:7)

dup2未返回void,它返回int,因此您应检查其返回码。如果dup2由于某种原因而失败,那就是问题,那么你就不会知道了。话虽如此,dup2通常一直有效。

有一个角落案例可能导致你所看到的:如果sockfd已经是0.那么你将dup2 0到0然后关闭0,让你没有文件描述符。因此,在使用dup2检查您尝试重新编号的文件描述符是否已正确编号之前,这是一种很好的做法。但同样,在你的情况下,这不可能比sockfd开始为0。

还有人说,你要做的事情应该有效。如果不是,那么除非你通过“它不起作用”澄清你的意思,否则没有人可以回答你的问题。