关于Linux系统上的文件的信息?

时间:2011-12-21 15:25:16

标签: c linux

我想知道进程是否正在使用一个确定文件,即该进程是否以只读模式打开文件。

我考虑过搜索/ proc / [pid] / [fd]目录,但这样我浪费了很多时间,而且我觉得这样做并不漂亮。

有没有办法使用某些Linux API来确定X文件是否被任何进程打开?或者也许某些结构数据如/ proc但是文件?

3 个答案:

答案 0 :(得分:3)

不是我知道的。 lsoffuser工具完全符合您的建议,可以浏览/proc/*/fd

请注意,如果文件在打开后被删除,则打开的文件可能没有名称,并且文件可以在没有进程保存文件描述符的情况下打开(通过mmap ),甚至两者的组合(这将是一个在进程退出时自动清理的进程专用交换文件)。

答案 1 :(得分:2)

确定进程是否正在使用文件很容易。反差越小。原因是内核不直接跟踪逆。保留的信息是:

  1. 文件知道有多少链接引用自身(inode表)
  2. 进程知道它打开了哪些文件(文件描述符表)
  3. 这就是为什么lsof的/ proc步行是必要的原因。特定进程使用的文件描述符保存在/ proj / $ PID(以及其他内容)中,因此lsof可以使用此(以及其他内容)来吐出所有pid< - > fd< - > inode关系。

    This is a nice article on lsof。与任何Linux util一样,您可以随时查看其源代码以获取所有详细信息:)

答案 2 :(得分:1)

lsof可能是您要搜索的工具。

编辑:我没有意识到你是专门搜索要在你的应用程序中集成的东西,所以我的答案看起来有点简单。但无论如何,我认为this question与你的关系非常相关。