我正在尝试编写一个程序,该程序分叉并等待他的孩子完成,然后孩子在输入上做一些工作然后以与父母一样的方式分叉等等。
现在,我知道分支复制到子文件描述符数组,我应该关闭与父文件关联的那些,但我无法弄清楚哪些是父文件。 我需要给孩子这是父母的pid吗?
我一直试图在一小时的大部分时间里绕过它,我想我有一种心灵障碍,因为我无法得出结论。
TL; DR:作为子进程,我如何知道哪些文件描述符属于我的父进程?
在fork
(以及任何exec
函数之前 ),您的子进程具有与其父进程相同的状态(除了fork
的结果,仅在子进程中为0)。 所以你知道什么是文件描述符,因为你已经编写了在父和子中运行的程序。 在Linux上你也可以阅读/proc/self/fd/
目录,参见proc(5) 。
您可以在fork
和exec
之前关闭大多数文件描述符; 你可以编写像
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