我希望在我的C程序中实现一种行为,即当发生SIGINT时,关闭所有打开的文件描述符。是否有一种简单的方法可以获取它们的列表?
我希望在我的C程序中实现一种行为,即当发生SIGINT时,关闭所有打开的文件描述符。是否有一种简单的方法可以获取它们的列表?
for (i = 0; i < fd_max; ++i) close (i);
。快速且相当通用。getrlimit(RLIMIT_NOFILE, &rlim)
жқҘжҹҘжүҫжңҖеӨ§зҡ„fd_max
гҖӮ - Dale Hagglundstdin
、stdout
和 stderr
(0、1、2)的文件描述符吗? - alk如果可用,您可以读取/proc/<pid>/fd
的内容。
但要注意潜在的竞争,如果您的应用程序在读取/proc/<pid>/fd
之后关闭或打开新的应用程序,则可能会发生竞争。
因此,总结一下,我建议采用Kevin Reid的方法。
/proc
是可用的?它是存在的最不可移植的噩梦。 - Jens/dev/fd/
。这比/proc/self/fd
更具可移植性。 - r.v我针对POSIX系统的解决方案:
所有打开的fd都是可能的最低值。
在open(2)
之上创建一个包装器函数。
您的新函数打开(并返回)所请求的fd,并将其值传递给一个名为define_if_is_the_higtest_fd_and_store_it()
的函数。
您应该有一个int hightest_fd_saved
,只能由单例函数(只有1个“描述符表”)save_fd()
访问(初始值为3(因为stderr
为2))。
将SIGINT
配置为信号函数。 在其中,您从[3,return_fd()
]循环。
我想这就是全部了...
exit();
或者return
退出时,内核会自动关闭这些文件描述符。 - yeyo