如何查找進程中的所有打開的文件(從內本身)所有打開的文件?關閉的過程
這似乎很有用後知道fork()
(exec()
之前)。
我知道getdtablesize()
的存及其更便攜sysconf(_SC_OPEN_MAX)
的,但似乎效率不高,試圖關閉每有效文件描述符,是否有背後或不打開的文件。 (我也知道過早優化的危險,這是更多的美學我猜:-)
如何查找進程中的所有打開的文件(從內本身)所有打開的文件?關閉的過程
這似乎很有用後知道fork()
(exec()
之前)。
我知道getdtablesize()
的存及其更便攜sysconf(_SC_OPEN_MAX)
的,但似乎效率不高,試圖關閉每有效文件描述符,是否有背後或不打開的文件。 (我也知道過早優化的危險,這是更多的美學我猜:-)
現有的機制是特定於平臺。 See this answer
這聽起來低效嘗試關閉所有的文件描述符,但它實際上並不壞。系統調用實現來查找文件描述符應該是相當有效的,如果系統是好的。
如果你想找到只關閉打開的文件描述符,你可以使用它存在系統proc文件系統。例如。在Linux上,/ proc/self/fd將列出所有打開的文件描述符。迭代該目錄,並關閉所有> 2,不包括表示正在迭代的目錄的文件描述符。
如果你的程序將調用fork
和exec
,你真的應該打開所有的文件描述符與O_CLOEXEC
標誌,所以你不必exec
之前,需要手動關閉它們。在打開文件後,您還可以使用fcntl
添加此標誌,但這受多線程程序中的競爭條件影響。
歡迎的比賽。 – ybungalobill 2017-12-16 04:45:54