我最近想看看如何在Linux内核中实现open()系统调用。查看syscall表,发现我要查找的函数的名称是sys_open(),因此我为此做了一个尝试。我找不到任何声明,但我能得到的最接近的是do_sys_open中的fs/open.c。是否以某种方式转换为该功能?我可能错过了什么?

最佳答案

不,do_sys_open不是sys_open的实现,它只是分解出的openopenat的通用代码。

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

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

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

这是open syscall的代码。

关于c - 如何在Linux源代码中找到特定系统调用的定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14542348/

10-13 04:29