我觉得好像dup2()是多余的

时间:2014-03-17 20:07:03

标签: c file-descriptor dup2

我的理解是,如果我有两个文件描述符

int fd1, fd2;

这两个功能都是:

dup2(fd1, fd2);

和 -

fd1 = dup2(fd1, fd2);

实际上将完成相同的任务。

具有返回值的dup2()有什么意义? 如果dup2()的返回值只是文件描述符,为什么只要说:

,为什么要使用dup2?
fd2 = fd1;

显然我在这里缺少一些东西。

顺便说一句:请不要告诉我阅读该联机帮助页或一些我不拥有的书。这没有用。

2 个答案:

答案 0 :(得分:1)

你缺少的是它没有复制包含fd值的变量,它使第二个fd引用与原始fd相同的打开文件。这两个文件描述符然后独立行动。

然而,dup2的一个主要用途是将stdio描述符“重新打开”到已打开的文件。例如,要在两个子进程之间进行管道,首先要使用pipe创建一个包含两个fds的管道。然后,在每个子流程中,dup2将用于将stdinstdout替换为其中一个管道fds。

答案 1 :(得分:0)

嗯..他们是同一个功能。在第一种情况下,您只是忽略了返回值。

并且返回值也可以是错误代码。如果您使用RTFM,您会看到:D

另据TFM

dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
. . .
(caveats left out)