3
哪裏可以找到一些系統調用的源代碼?例如,我正在尋找如here所述的fstat
的實現。linux系統調用執行
哪裏可以找到一些系統調用的源代碼?例如,我正在尋找如here所述的fstat
的實現。linux系統調用執行
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。
他們在內核源代碼使用SYSCALL_DEFINEx定義,例如[FSTAT這裏(http://lxr.free-electrons.com/source/fs/stat.c #L203)。 –