我最近想看看如何在Linux内核中实现open()
系统调用。查看syscall表,发现我要查找的函数的名称是sys_open()
,因此我为此做了一个尝试。我找不到任何声明,但我能得到的最接近的是do_sys_open
中的fs/open.c
。是否以某种方式转换为该功能?我可能错过了什么?
最佳答案
不,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
syscall的代码。关于c - 如何在Linux源代码中找到特定系统调用的定义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14542348/