c/c++语言开发共享作为进程子进程,如何知道哪个文件描述符是父进程

我正在尝试编写一个程序,该程序分叉并等待他的孩子完成,然后孩子在输入上做一些工作然后以与父母一样的方式分叉等等。

现在,我知道分支复制到子文件描述符数组,我应该关闭与父文件关联的那些,但我无法弄清楚哪些是父文件。 我需要给孩子这是父母的pid吗?

我一直试图在一小时的大部分时间里绕过它,我想我有一种心灵障碍,因为我无法得出结论。

TL; DR:作为子进程,我如何知道哪些文件描述符属于我的父进程?

    fork (以及任何exec函数之前 ),您的子进程具有与其父进程相同的状态(除了fork的结果,仅在子进程中为0)。 所以你知道什么是文件描述符,因为你已经编写了在父和子中运行的程序。 在Linux上你也可以阅读/proc/self/fd/目录,参见proc(5) 。

    您可以在forkexec之前关闭大多数文件描述符; 你可以编写像

     for (int fd=3; fd<64; fd++) (void) close(fd); 

    我们从3开始,这是在STDERR_FILENO之后是2,我们在64时任意停止,并且close电话上的演员(void)意味着我们不关心失败close的读者。当然,如果您有一些管道(7) -s在父母和孩子之间进行通信,您将小心避免关闭其相关的文件描述符。

    (但是,像上面那样做一个闭环就是味道不好和旧时尚)

    一般情况下,在程序中要小心在大多数文件描述符上设置close-on-exec标志(例如F_SETFD操作上的fcntl(2)和FD_CLOEXEC标志,或者用O_CLOEXEC直接打开(2) ),然后执行execve (2) (在fork之后的大多数子进程中完成)将关闭它们。

      以上就是c/c++开发分享作为进程子进程,如何知道哪个文件描述符是父进程相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/519072.html

      (0)
      上一篇 2020年12月5日
      下一篇 2020年12月5日

      精彩推荐