冗余的Linux内核系统调用

5
我目前正在开发一个项目,它会钩入各种系统调用并将内容写入日志,具体取决于哪个调用被调用。例如,当我更改文件的权限时,我会在跟踪旧权限和新权限的日志文件中写入一条小记录。然而,我有些困惑,不确定应该在哪里进行监视。对于上面的示例,strace告诉我“chmod”命令使用系统调用sys_fchmodat()。但是,也有sys_chmod()和sys_fchmod()。
我相信内核开发人员知道他们在做什么,但我想知道:所有这些(看似)多余的系统调用的目的是什么,是否有任何规则来指定使用哪些调用?(即,带有“at”系统调用或以“f”为前缀的调用是否有特定的用途?)
2个回答

11

历史 :-)

一旦系统调用被创建,就无法更改,因此当需要新功能时,就会创建一个新的系统调用。(当然,这意味着在创建新系统调用之前必须有非常高的门槛)。


6

是的,有一些命名规则。

  • chmod接受文件名,而fchmod接受文件描述符。stat与fstat同理。
  • fchmodat接受文件描述符/文件名对(目录的文件描述符和文件名在该目录中)。*at调用也是如此;请参阅http://kerneltrap.org/man/linux/man2/openat.2 的NOTES部分以获取说明。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接