【问题标题】:How to detect when a certain file has been opened?如何检测某个文件何时被打开?
【发布时间】:2023-03-27 13:28:01
【问题描述】:

我正在 Linux 上使用 C 语言开发一个小项目,但遇到了问题。 我必须制作一个模拟 WatchDog 活动的程序。所以我写了几乎所有的代码,但我不知道如何做最重要的部分。 当我的应用程序在后台运行时,它必须检测何时访问某些文件。我在一些结构中存储了这些文件的索引节点、路径和名称。那么,拥有有关文件的这些信息,我如何检测进程(任何进程,而不是某个进程)何时尝试访问其中一个文件? 编辑:实际上,我必须检测以下事件:打开文件时以及有人尝试修改文件时。比如,如果用户向文件写入内容然后尝试保存更改,我必须允许或不允许他这样做。

【问题讨论】:

  • 为什么不直接从文件中删除写权限?
  • 从未这样做过,但我相信您应该进行系统调用以获取所有进程,然后获取每个进程的句柄列表,然后获取这些句柄的文件名。
  • 你需要阻止写入还是需要被动检测?
  • 您可以使用inotify 收到有关文件更改的通知。但我认为您不会收到有关正在打开或读取文件的通知。
  • 其实看起来可以。有一个IN_OPEN 事件。 inotify的文档见man7.org/linux/man-pages/man7/inotify.7.html

标签: c linux file


【解决方案1】:

您正在寻找文件系统观察者。为此,您可以使用 Inotify:http://en.m.wikipedia.org/wiki/Inotify

【讨论】:

  • 根据我的阅读,它应该可以做到。我会试试看,我会及时通知你。谢谢! [无法对答案投赞成票,因为我刚刚注册并且没有所需的声誉]
  • 不幸的是,提问者需要 inotify 无法提供的功能。
  • "如果用户将某些内容写入文件然后尝试保存更改,我必须允许他这样做或不这样做。"这将要求您拦截打开文件并写入文件的系统调用。 Inotify 确实没有这样做。
  • 顺便说一句,如果用户写入文件,那么就没有保存他的更改这样的事情。已经完成了。
  • 我的回答不是很好。请参阅stackoverflow.com/questions/69859/… 了解如何拦截系统调用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多