2

我最近想看看open()系统调用是如何在 Linux 内核中实现的。查看 syscall 表表明我要查找的函数的名称是sys_open(),因此我对其进行了查找。虽然我找不到任何声明,但我能得到的最接近的do_sys_openfs/open.c. 它是否以某种方式翻译成这个功能?我可能错过了什么?

4

1 回答 1

7

不,do_sys_open不是 的实现sys_open,它只是一个通用代码open并被openat分解出来。

Syscall 函数名称,总是sys_一些东西,是由有趣的预处理器宏生成的(SYSCALL_DEFINEn其中n是参数的数量)。

如您所见(非常接近do_sys_open):

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

open系统调用的代码。

于 2013-01-26T23:13:07.780 回答