【发布时间】:2013-01-10 15:06:23
【问题描述】:
我最近想看看open() 系统调用是如何在 Linux 内核中实现的。查看系统调用表表明我正在寻找的函数的名称是sys_open(),所以我为它寻找了它。但是我找不到任何声明,我能得到的最接近的是fs/open.c 中的do_sys_open。它是否以某种方式翻译成这个功能?我可能错过了什么?
【问题讨论】:
标签: c linux kernel system-calls
我最近想看看open() 系统调用是如何在 Linux 内核中实现的。查看系统调用表表明我正在寻找的函数的名称是sys_open(),所以我为它寻找了它。但是我找不到任何声明,我能得到的最接近的是fs/open.c 中的do_sys_open。它是否以某种方式翻译成这个功能?我可能错过了什么?
【问题讨论】:
标签: c linux kernel system-calls
不,do_sys_open 不是sys_open 的实现,它只是open 和openat 的通用代码。
Syscall 函数名称,总是sys_something,由有趣的预处理器宏生成(SYSCALL_DEFINEn,其中n 是参数的数量)。
如你所见(非常接近do_sys_open):
SYSCALL_DEFINE3(open, const char __user *, filename, int, flags, umode_t, mode)
{
long ret;
....
这个是open系统调用的代码。
【讨论】: