Linux系统调用的实现

3

我在哪里可以找到一些系统调用的源代码?例如,我正在寻找这里描述的fstat实现。


2
它们使用SYSCALL_DEFINEx在内核源代码中定义,例如fstat here - Joachim Isaksson
1个回答

6

一个系统调用通常在Linux内核中实现,只有很少量的粘合代码在C标准库中。但是也可以看看vdso(7)

从用户层面来看,一个系统调用(它们列在syscalls(2)中...)是一条单独的机器指令(通常为SYSENTER),具有一些调用约定(例如定义哪个机器寄存器保存系统调用号码 - 例如/usr/include/asm/unistd_64.h中的__NR_stat...-,以及哪些其他寄存器包含系统调用的参数)。

使用strace(1)命令可以了解给定程序或进程执行了哪些系统调用。
C标准库有一个小型包装函数(调用内核,遵循ABI,并处理错误报告和errno)。
例如,在musl-libc中,stat(2)的C包装函数在stat/stat.c中。
内核代码中,大部分工作发生在fs/stat.c(例如,在207行之后)。
另请参见thisthat答案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接