use*_*650 5 c io file-descriptor
我想在我的C程序中实现行为,这样如果发生SIGINT,我会关闭所有打开的文件描述符.有一个简单的方法来获取它们的列表?
跟踪所有打开的文件描述符并单独关闭它们。
在一般情况下,您正在使用的库可能有一个打开的文件,关闭它会导致该库行为异常。
事实上,同样的问题也可能存在于您自己的代码中,因为如果您不加区别地关闭文件描述符,但程序的另一部分仍然记住该文件描述符并尝试使用它,它将出现意外错误,或者(如果其他文件已被关闭)自从打开以来)对错误的文件进行了操作。负责打开文件的组件也负责关闭文件会更好。
如果有的话,您可以读出 的内容/proc/<pid>/fd.。
但请注意潜在的竞争,如果您的应用程序在您读出的内容/proc/<pid>/fd和您要关闭所阅读的内容之间关闭了一些应用程序或打开了新的应用程序,则可能会发生这种情况。
因此,我想推荐 Kevin Reid 的方法。
我用蛮力:for (i = 0; i < fd_max; ++i) close (i);.快速,漂亮便携.