我的理解是,如果我有两个文件描述符
int fd1, fd2;
这两个功能都是:
dup2(fd1, fd2);
和 -
fd1 = dup2(fd1, fd2);
实际上将完成相同的任务。
具有返回值的dup2()有什么意义? 如果dup2()的返回值只是文件描述符,为什么只要说:
,为什么要使用dup2?fd2 = fd1;
显然我在这里缺少一些东西。
顺便说一句:请不要告诉我阅读该联机帮助页或一些我不拥有的书。这没有用。答案 0 :(得分:1)
你缺少的是它没有复制包含fd值的变量,它使第二个fd引用与原始fd相同的打开文件。这两个文件描述符然后独立行动。
然而,dup2
的一个主要用途是将stdio描述符“重新打开”到已打开的文件。例如,要在两个子进程之间进行管道,首先要使用pipe
创建一个包含两个fds的管道。然后,在每个子流程中,dup2
将用于将stdin
或stdout
替换为其中一个管道fds。
答案 1 :(得分:0)
并且返回值也可以是错误代码。如果您使用RTFM,您会看到:D
另据TFM
dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
. . .
(caveats left out)