2

open()最近、Linuxカーネルでシステムコールがどのように実装されているかを知りたいと思いました。syscallテーブルを見ると、探している関数の名前がであることがsys_open()わかったので、それを探しました。宣言は見つかりませんでしたが、最も近いのはでしdo_sys_openfs/open.c。どういうわけかこの関数に変換されますか?私は何を逃した可能性がありますか?

4

1 に答える 1

7

いいえ、do_sys_openの実装ではありません。これはsys_open単なる一般的なコードでopenあり、openat除外されています。

sys_常に何かであるSyscall関数名は、面白いプリプロセッサマクロ(引数の数)SYSCALL_DEFINEnによって生成されます。n

あなたが見ることができるように(非常に近いdo_sys_open):

SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
        long ret;
        ....

これopensyscallのコードです。

于 2013-01-26T23:13:07.780 に答える