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

use*_*973 0 linux hp-ux

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

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

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

但它没有工作的错误呢?

Cel*_*ada 7

dup2不返回void,它返回int,所以你应该检查它的返回码.如果dup2由于某种原因而失败,那就是问题,那么你就不会知道它了.话虽如此,dup2通常总能奏效.

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

还有人说,你要做的就是应该工作.如果不是,那么除非你通过"它不起作用"澄清你的意思,否则没有人可以回答你的问题.