【问题标题】:How to trace attribute changes of file in Linux system call layerLinux系统调用层如何跟踪文件的属性变化
【发布时间】:2018-04-16 01:04:42
【问题描述】:

如何跟踪Linux内核系统调用层的属性变化。

创建一个文件名为 test.txt

touch test.txt -> 在这种情况下,访问时间已更改。在 VFS 层可以使用“setattr”进行跟踪,但如何在 sys 调用层进行跟踪?

【问题讨论】:

  • 另一种方法是避开内核并在用户区使用inotify(7) 设施。
  • 是的,但想在内核中探索

标签: linux linux-kernel kernel linux-device-driver kernel-module


【解决方案1】:

touch 使用函数 utimensat() 来执行此操作。您可以使用“strace touch test.txt”对其进行跟踪。 http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html http://pubs.opengroup.org/onlinepubs/9699919799/functions/utimensat.html

任何 write() 或 read() 系统调用都会修改访问时间(如果挂载选项不阻止它)。

除了使用像“touch”这样的显式系统调用直接操作访问时间之外,Linux 内核使用文件系统的 atime 挂载选项定义的规则来定义何时修改访问时间。在 mount 手册页中搜索 atime 一词,可以查看规则的详细信息。

查看 fs/utimes.c 有助于理解 atime 修改所涉及的系统调用。

【讨论】:

  • 这不是特定于触摸和修改,如 echo "hello">test.txt 系统调用它通过它来修改文件属性.. 就像在 VFS 中它通过 setattr VFS 调用。跨度>
  • 您特意询问了触摸示例和 Linux 内核系统调用层。
  • 没有。它的文件属性的一般设置是通过内核中的哪个系统调用更新的?
  • 一般?它取决于文件系统挂载选项,并且仅间接来自可能最终更新访问时间的各种系统调用。
猜你喜欢
  • 2015-07-02
  • 2014-03-20
  • 2011-08-02
  • 2012-04-03
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
相关资源
最近更新 更多