c++重定向dup2

  • 进程会默认打开三个文件,即标准输入、标准输出、标准错误,分别对应文件描述符0 1 2。这也是为什么我们打开文件时,返回的文件描述符是从3开始

  • 文件描述符的分配规则为从0开始,扫描文件描述符表中,没有被使用的数值最小的下标,作为新打开文件的文件描述符

  • dup
    打开一个新的文件描述符,指向和oldfd同一个文件,共享文件偏移量和文件状态。

#include <unistd.h>
int dup(int oldfd);
  • dup2
    把指定的newfd也指向oldfd指向的文件,也就是说,执行完dup2之后,有newfd和oldfd同时指向同一个文件,共享文件偏移量和文件状态
#include <unistd.h>
int dup2(int oldfd, int newfd);

  • 标准日志重定向到日志文件
      dup2(fileno(fp), STDOUT_FILENO);
      dup2(fileno(fp), STDERR_FILENO);

ls -trl /proc/16086/fd 可以看到,文件描述符1 2都已经重定向了

参考:
https://cloud.tencent.com/developer/article/2278388

posted @ 2024-05-16 17:51  LdreamerD  阅读(3)  评论(0)    收藏  举报