为什么dup2可以在这里工作?

时间:2012-08-07 08:44:35

标签: c linux kernel dup2

我从APUE获得了这段代码,

if (dup2(clfd, STDOUT_FILENO) != STDOUT_FILENO ||
          dup2(clfd, STDERR_FILENO) != STDERR_FILENO) {
            syslog(LOG_ERR, "ruptimed: unexpected error");
            exit(1);
        }

将所有输出,stderr和stdout重定向到远程套接字,可以通过clfd写入。

但那怎么可行呢?您正在将两个FD重定向到一个FD。

1 个答案:

答案 0 :(得分:1)

  

但那怎么可行呢?您正在将两个FD重定向到一个

这没问题。 The standard说:

int dup2(int fildes, int fildes2);
     

dup2()函数将导致文件描述符fildes2引用   与文件描述符fildes相同的打开文件描述。如果   fildes2已经是一个有效的打开文件描述符,它应该被关闭   第一

在任何时候,它都没有提到涉及同一目的地的多个描述符是非法的。

内核只需要将进程中的多个文件描述符指向系统范围的打开文件表中的相同条目。