2016-02-14 194 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回答