Where can I find the source code of some of the system calls? For example, I am looking for the implementation of fstat as described here.
- 23,197
 - 49
 - 147
 - 242
 
- 
                    2They're defined in the kernel source using SYSCALL_DEFINEx, for example [fstat here](http://lxr.free-electrons.com/source/fs/stat.c#L203). – Joachim Isaksson Feb 14 '16 at 16:41
 
1 Answers
A system call is mostly implemented inside the Linux kernel, with a tiny glue code in the C standard library. But see also vdso(7).
From the user-land point of view, a system call (they are listed in syscalls(2)...) is a single machine instruction (often SYSENTER) with some calling conventions (e.g. defining which machine register hold the syscall number - e.g. __NR_stat from /usr/include/asm/unistd_64.h....-, and which other registers contain the arguments to the system call).
Use strace(1) to understand which system calls are done by a given program or process.
The C standard library has a tiny wrapper function (which invokes the kernel, following the ABI, and deals with error reporting & errno).
For stat(2), the C wrapping function is e.g. in stat/stat.c for musl-libc.
Inside the kernel code, most of the work happens in fs/stat.c (e.g. after line 207).
- 1
 - 1
 
- 223,805
 - 18
 - 296
 - 547