冗長Linuxカーネルシステムコール
-
06-07-2019 - |
質問
現在、さまざまなシステムコールにフックし、呼び出されたものに応じて、ログに物事を書き込むプロジェクトに取り組んでいます。そのため、たとえば、ファイルのアクセス許可を変更すると、古いアクセス許可と新しいアクセス許可を追跡する小さなエントリをログファイルに書き込みます。しかし、私が見ているべき場所を正確に特定するのに苦労しています。上記の例では、straceは" chmod"コマンドは、システムコールsys_fchmodat()を使用します。ただし、sys_chmod()とsys_fchmod()もあります。
カーネル開発者は自分が何をしているのか知っていると思いますが、これらの(一見)冗長なシステムコールのポイントは何ですか? (つまり、" at" syscallsまたは" f"の接頭辞が付いたsyscallsは、特定の何かを行うことを意図していますか?)
解決
はい、いくつかの命名規則があります。
- chmodはファイル名を取り、fchmodはファイル記述子を取ります。 stat vs fstatでも同じです。
- fchmodatは、ファイル記述子/ファイル名のペア(ディレクトリのファイル記述子とディレクトリ内のファイル名のファイル名)を取ります。他の* at呼び出しでも同じです。 http://kerneltrap.org/man/linux/man2/openatのNOTESセクションを参照してください。 .2 の説明。
他のヒント
履歴:-)
システムコールが作成されると、変更することはできません。したがって、新しい機能が必要な場合は、新しいシステムコールが作成されます。 (もちろん、これは、新しいシステムコールが作成される前に非常に高いバーがあることを意味します。)
所属していません StackOverflow