C获取所有打开的文件描述符
我想在我的C程序中实现行为,这样如果发生SIGINT,我会关闭所有打开的文件描述符。 有一个简单的方法来获取它们的列表?
我使用暴力: for (i = 0; i < fd_max; ++i) close (i);
。 快速,漂亮便携。
跟踪所有打开的文件描述符并单独关闭它们。
在一般情况下,您正在使用的库可能具有打开的文件,关闭它将导致该库行为exception。
实际上,您自己的代码中可能存在同样的问题,因为如果您不加区别地关闭文件描述符但程序的另一部分仍然记得文件描述符并尝试使用它,则会出现意外错误或(如果其他文件已被删除)打开以后) 操作错误的文件 。 负责打开文件的组件也要负责关闭它。
你可以读出/proc/
, 如果可供使用的话。
但请注意,如果您的应用程序关闭某些内容或在您的read out /proc/
之间打开新内容并且您要关闭所阅读的内容,则可能会发生这种竞争。
如此简洁,我想推荐Kevin Reid的方法。
我的POSIX系统解决方案:
所有打开的fd都是可能的最低值。
open(2)
创建包装函数open(2)
。
您的新函数打开(并返回)请求的fd并将其值传递给名为define_if_is_the_higtest_fd_and_store_it()
的函数。
你应该只有一个int hightest_fd_saved
可以访问名为save_fd()
的单例函数(只有1’描述符表’ save_fd()
(初始值为3(cuz stderr
为2))。
将SIGINT
配置为信号function。 在里面,你从[3, return_fd()
]做一个循环。
我想就是这样……