5

私は現在、さまざまなシステム コールにフックし、呼び出されたシステム コールに応じてログに書き込むプロジェクトに取り組んでいます。そのため、たとえば、ファイルのアクセス許可を変更するときは、古いアクセス許可と新しいアクセス許可を追跡するログ ファイルに小さなエントリを書き込みます。しかし、私が見るべき場所を正確に特定するのに苦労しています. 上記の例では、strace は、「chmod」コマンドがシステム コール sys_fchmodat() を使用していることを示しています。ただし、sys_chmod() と sys_fchmod() もあります。

カーネル開発者は自分たちが何をしているのかを知っていると確信していますが、私は疑問に思います: これらの (一見) 冗長なシステムコールのポイントは何ですか? また、どのシステムコールが何に使用されるかについての規則はありますか? (つまり、"at" システムコールか、それとも "f" で始まるシステムコールか?)

4

2 に答える 2

11

歴史 :-)

システム コールが作成されると、それを変更することはできません。したがって、新しい機能が必要になると、新しいシステム コールが作成されます。(もちろん、これは、新しいシステム コールが作成される前に非常に高いハードルがあることを意味します)。

于 2008-11-04T22:12:33.170 に答える
6

はい、いくつかの命名規則があります。

  • chmod はファイル名を受け取り、fchmod はファイル記述子を受け取ります。stat と fstat についても同じです。
  • fchmodat は、ファイル記述子/ファイル名のペア (ディレクトリのファイル記述子とディレクトリ内のファイル名のファイル名) を取ります。他の *at 呼び出しについても同じです。説明については、 http://kerneltrap.org/man/linux/man2/openat.2の NOTES セクションを参照してください。
于 2008-11-04T23:59:02.457 に答える