c - 我觉得 dup2() 是多余的

标签 c file-descriptor dup2

据我了解,如果我有两个文件描述符

int fd1, fd2;

这两个函数:

dup2(fd1, fd2);

并且 -

fd1 = dup2(fd1, fd2);

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

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

fd2 = fd1;

显然我在这里遗漏了一些东西。

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

最佳答案

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

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

关于c - 我觉得 dup2() 是多余的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22464260/

相关文章:

c - 作为进程子进程,如何知道哪个文件描述符是父进程

c - 在共享库中使用全局变量

objective-c - 从 C 函数调用 Objective C 方法

c - 使用 C 中的文件描述符查找文件流的大小

python - 关闭我在 fdopen 中使用的文件描述符

c++ - 将 FROM stderr 重定向到另一个文件描述符

澄清 Pipe() 和 dup2() 在 C 中如何工作

C 如何使用 exec 函数和管道获取其他程序的结果

c - 跟踪 Mhash 文件(散列)

c - 为什么我的符号测试总是报告 "negative"?