【问题标题】:I feel as though dup2() is redundant我觉得好像 dup2() 是多余的
【发布时间】:2014-03-17 20:07:03
【问题描述】:

我的理解是,如果我有两个文件描述符

int fd1, fd2;

这两个功能:

dup2(fd1, fd2);

还有——

fd1 = dup2(fd1, fd2);

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

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

fd2 = fd1;

显然我在这里缺少一些东西。

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

【问题讨论】:

  • 也许更好的问题是为什么我们同时拥有dupdup2

标签: c file-descriptor dup2


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    嗯..它们是相同的功能。在第一种情况下,您只是忽略了返回值。

    并且所说的返回值也可以是错误码。如果您使用 RTFM,您会看到哪个:D

    同样按照TFM

    dup2() makes newfd be the copy of oldfd, closing newfd first if necessary
    . . .
    (caveats left out)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 1970-01-01
      • 2011-07-13
      • 2021-10-19
      • 2018-10-01
      • 1970-01-01
      • 2011-05-09
      相关资源
      最近更新 更多