2008-11-04 135 views
4

我目前正在研究一个项目,该项目可以挂钩到各种系统调用中,并根据调用的内容将事情写入日志。因此,例如,当我更改文件的权限时,我会向跟踪旧权限和新权限的日志文件写入一些内容。但是,我在确定要看的位置时遇到了一些麻烦。对于上面的例子,strace告诉我,“chmod”命令使用系统调用sys_fchmodat()。但是,还有一个sys_chmod()和一个sys_fchmod()。我确定内核开发者知道他们在做什么,但是我想知道:所有这些(看似)冗余的系统调用的重点是什么,并且有哪些规则用于什么? (即是在“为”与“F”开头的系统调用或者那些打算做一些具体的事情?)冗余的Linux内核系统调用

回答

6

是的,有一些命名规则。

  • chmod取文件名,而fchmod取文件描述符。 stat与fstat相同。
  • fchmodat需要一个文件描述符/文件名对(目录中的文件描述符和目录中文件名的文件名)。其他*在呼叫时相同;有关说明,请参阅http://kerneltrap.org/man/linux/man2/openat.2的NOTES部分。
11

历史:-)

一旦系统调用已创建它永远不能被改变,因此当需要新功能时,会创建一个新的系统调用。 (当然这意味着在创建新的系统调用之前有一个非常高的栏)。