代码之家  ›  专栏  ›  技术社区  ›  Dan Fego

冗余Linux内核系统调用

  •  5
  • Dan Fego  · 技术社区  · 16 年前

    我目前正在进行一个项目,该项目连接到各种系统调用,并根据调用的系统将内容写入日志。因此,例如,当我更改文件的权限时,我会在日志文件中写入一个小条目,跟踪旧权限和新权限。然而,我很难确定我应该在哪里观看。对于上面的例子,strace告诉我“chmod”命令使用系统调用sys_fchmodate()。但是,还有一个sys_chmod()和一个sys_fchmod()。

    我确信内核开发人员知道他们在做什么,但我想知道:所有这些(看似)冗余的系统调用的意义是什么,对于哪些调用用于什么,有什么规则吗?(即,“at”系统调用或前缀为“f”的系统调用是否意味着执行特定操作?)

    2 回复  |  直到 16 年前
        1
  •  11
  •   Douglas Leeder    16 年前

    历史:-)

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

        2
  •  6
  •   CesarB    16 年前

    是的,有一些命名规则。

    • chmod接受文件名,而fchmod接受文件描述符。stat和fstat也是如此。
    • fchmodat采用文件描述符/文件名对(目录的文件描述符和目录中文件名的文件名)。其他电话也是如此;请参阅 http://kerneltrap.org/man/linux/man2/openat.2 为了得到解释。