据我了解,如果我有两个文件描述符
int fd1, fd2;
这两个函数:
dup2(fd1, fd2);
并且 -
fd1 = dup2(fd1, fd2);
实际上将完成相同的任务。
dup2() 有返回值有什么意义? 如果 dup2() 的返回值只是文件描述符,那么为什么要使用 dup2 如果你可以直接说:
fd2 = fd1;
显然我在这里遗漏了一些东西。
顺便说一句:请不要告诉我阅读手册页或一些我不拥有的书。那没有帮助。
最佳答案
您缺少的是它不会复制包含 fd 值的变量,它会创建第二个 fd,它引用与原始 fd 相同的打开文件。然后,这两个文件描述符独立运行。
但是,dup2
的一个主要用途是为已打开的文件“重新打开”stdio 描述符。例如,要在两个子进程之间进行管道传输,您首先需要使用 pipe
创建一个具有两个 fd 的管道。然后,在每个子进程中,dup2
将用于将 stdin
或 stdout
替换为管道 fd 之一。
关于c - 我觉得 dup2() 是多余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464260/