2016-02-14 132 views
3

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

+2

他们在内核源代码使用SYSCALL_DEFINEx定义,例如[FSTAT这里(http://lxr.free-electrons.com/source/fs/stat.c #L203)。 –

回答

6

A system call主要在Linux kernel内部实现,在C standard library中有一个很小的粘合代码。但也请参阅vdso(7)

从用户地角度来看,系统调用(它们在syscalls(2)列出...)是一个单一的机器指令(通常SYSENTER)与一些calling conventions(例如,其限定机器寄存器保持系统调用号码 - 例如__NR_stat from /usr/include/asm/unistd_64.h ....-,以及哪些其他寄存器包含系统调用的参数)。

使用strace(1)来了解哪个系统调用是由给定的程序或进程完成的。

C标准库有一个很小的包装函数(调用内核,在ABI之后,并且处理错误报告& errno)。

对于stat(2),C环绕功能是例如,在stat/stat.c中为musl-libc

kernel代码中,大部分工作发生在fs/stat.c(例如207行之后)。

参见this & that回答