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