我的理解是,如果我有两个文件描述符
int fd1, fd2;
这两个函数:
dup2(fd1, fd2);
And -
fd1 = dup2(fd1, fd2);
实际上将完成相同的任务。
dup2()有返回值的意义是什么?如果dup2()的返回值只是文件描述符,那么为什么要使用dup2呢?如果您可以直接说:
fd2 = fd1;
显然我在这里漏掉了什么。
顺便说一句:请不要告诉我读手册,或者一些我不拥有的书。这没有帮助。
您缺少的是它不会复制包含fd值的变量,它会生成第二个fd,该fd指向与原始fd相同的打开文件。然后,这两个文件描述符独立工作。
然而,dup2
的一个主要用途是将一个工作室描述符"重新打开"到一个已经打开的文件。例如,要在两个子进程之间建立管道,首先要使用pipe
创建一个具有两个fds的管道。然后,在每个子进程中,dup2
将用其中一个管道fds替换stdin
或stdout
。
嗯…它们是同一个函数。在第一种情况下,您只是忽略返回值。
并且所述返回值也可以是错误代码。如果你输入RTFM:D
也是根据TFM
dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
. . .
(caveats left out)