Mag*_*nus 17 unix process filehandle
如何查找进程中的所有打开文件(来自内部)?
在fork()(之前exec())之后知道这似乎很有用.
我知道它的存在性getdtablesize()和可移植性sysconf(_SC_OPEN_MAX),但是尝试关闭每个有效的文件描述符似乎效率低下,无论是否有一个打开的文件.(我也意识到过早优化的危险,这更多是关于美学我猜:-)
如果你的程序将调用fork和exec,你真的应该打开所有的文件描述符与O_CLOEXEC标志,所以你不必之前,需要手动关闭它们exec.您还可以fcntl在打开文件后使用此标志添加此标志,但这受多线程程序中的竞争条件的影响.
尝试关闭所有文件描述符可能听起来效率低,但实际上并没有那么糟糕.如果系统是好的,系统调用实现来查找文件描述符应该是相当有效的.
如果要查找仅关闭打开的文件描述符,可以在存在的系统上使用proc文件系统.例如,在Linux上,/ proc/self/fd将列出所有打开的文件描述符.迭代该目录,并关闭所有> 2,排除表示您正在迭代的目录的文件描述符.
| 归档时间: |
|
| 查看次数: |
17025 次 |
| 最近记录: |