0

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

int fd1, fd2;

这两个功能:

dup2(fd1, fd2);

和 -

fd1 = dup2(fd1, fd2);

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

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

fd2 = fd1;

很明显,我在这里缺少一些东西。

顺便说一句:请不要告诉我阅读手册页,或者我不拥有的书。那没有帮助。

4

2 回答 2

1

您缺少的是它不会复制包含 fd 值的变量,它会生成第二个 fd,它引用与原始 fd 相同的打开文件。这两个文件描述符然后独立运行。

然而,一个主要用途dup2是“重新打开”一个标准输入输出描述符到一个已经打开的文件。例如,要在两个子进程之间进行管道传输,您将首先使用pipe创建具有两个 fd 的管道。然后,在每个子进程中,dup2将用于替换stdinstdout用其中一个管道 fds。

于 2014-03-17T20:40:09.433 回答
0

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

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

同样根据TFM

dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
. . .
(caveats left out)
于 2014-03-17T20:14:00.340 回答