首页 文章

linux系统调用实现

提问于
浏览
3

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

1 回答

  • 6

    system call主要在Linux kernel内部实现,C standard library中有一个微小的胶水代码 . 但另见vdso(7) .

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

    使用strace(1)了解给定程序或进程执行的系统调用 .

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

    对于stat(2),C包裹函数是例如 . 在stat/stat.c中为musl-libc .

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

    另见thisthat答案

相关问题