2009-08-22 32 views
10

如何查找進程中的所有打開的文件(從內本身)所有打開的文件?關閉的過程

這似乎很有用後知道fork()exec()之前)。

我知道getdtablesize()的存及其更便攜sysconf(_SC_OPEN_MAX)的,但似乎效率不高,試圖關閉每有效文件描述符,是否有背後或不打開的文件。 (我也知道過早優化的危險,這是更多的美學我猜:-)

回答

3

這聽起來低效嘗試關閉所有的文件描述符,但它實際上並不壞。系統調用實現來查找文件描述符應該是相當有效的,如果系統是好的。

如果你想找到只關閉打開的文件描述符,你可以使用它存在系統proc文件系統。例如。在Linux上,/ proc/self/fd將列出所有打開的文件描述符。迭代該目錄,並關閉所有> 2,不包括表示正在迭代的目錄的文件描述符。

8

如果你的程序將調用forkexec,你真的應該打開所有的文件描述符與O_CLOEXEC標誌,所以你不必exec之前,需要手動關閉它們。在打開文件後,您還可以使用fcntl添加此標誌,但這受多線程程序中的競爭條件影響。

+0

歡迎的比賽。 – ybungalobill 2017-12-16 04:45:54