如何在内核空间代码中获取所有打开的文件句柄?

时间:2017-08-21 06:15:49

标签: linux-kernel filesystems

我想在内核空间中编写代码来查找系统中的所有打开文件句柄以及process id来保存这些句柄。

在用户空间中,我们可以使用实用程序" lsof"来完成。同样,我想在内核空间中使用相同的内容。

1 个答案:

答案 0 :(得分:1)

Linux Kernel的优点在于它是开源的。如果您想了解如何实现与lsof类似的内容,为什么不检查它的'源代码(我建议the following implementation, from Android 4.2.2 source tree,简化并且更容易理解)或strace来理解魔法是如何发生的?

如果你这样做,在某些时候你会遇到以下行

openat(AT_FDCWD, "/proc/<PID>/fd", O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC)

这将提示您对于正在运行的每个PID,procfs能够打印有关此进程持有的所有打开文件描述符的信息。因此,this是我开始研究和浏览代码的地方。