0

我从 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 重定向到一个。

4

1 回答 1

1

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

这没有问题。标准说:

int dup2(int fildes, int fildes2);

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

它从来没有提到任何关于引用同一目的地的多个描述符是非法的。

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

于 2012-08-07T08:48:26.980 回答