gpt4 book ai didi

c++ - 在程序启动时关闭所有继承的 fds

转载 作者:太空宇宙 更新时间:2023-11-04 12:56:20 25 4
gpt4 key购买 nike

我的 C++ 程序在 Linux 下运行,运行很多子进程,并且在每次 fork 运行子进程后,我关闭所有继承的 fds 以防止子进程访问它们。现在,我的程序也从其父级继承了一些 fds,在程序启动时关闭所有这些继承的 fds 比在每次 fork 后一遍又一遍地关闭它们更有意义。

问题是,我真的不知道哪些 fds 是真正继承的,哪些是我的。当我在 main() 时,很多代码已经运行,并且程序可能已经创建了一些它自己的 fds(例如,在库、静态对象等的初始化期间)。那么我怎么能只关闭继承的 fds 呢?

最佳答案

  1. 您的问题并不清楚:您是只调用 fork() 还是在 fork() 之后另外调用 execve()?如果调用 execve() , O_CLOEXEcflags应该可以帮助你。您可以在 execve() 之后通过 fcntl() 系统调用或将 O_CLOEXEC 传递给创建您的 fds 的系统调用,在您不打算保留的描述符上设置此标志。

  2. 如果您不调用 execve(),您将完全继承父级的状态。如果文件描述符是“您的”,则它已存储在您的数据结构中的某个位置。因此,您可以迭代这些结构并根据您的需要处理描述符。

关于c++ - 在程序启动时关闭所有继承的 fds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35639070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com