linux系统调用实现

时间:2016-02-14 16:33:06

标签: linux-kernel system-calls

在哪里可以找到某些系统调用的源代码?例如,我正在寻找fstat的实施.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { viewPager .setCurrentItem(viewPage.getCurrentItem() + 1); });

1 个答案:

答案 0 :(得分: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.cmusl-libc

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

另见this& that回答