应用程序在发起某个系统调用时,是先调用标准库中的同名函数,标准库再根据不同体系结构来选择特定的方式陷入内核。
以socket库函数为例(以下均为uClibc中的实现),来说明标准库是如何一步步解析系统调用名并进入内核的:
socket系统调用号:
#define __NR_socket (4000 + 183)
socket()函数的实现就是下面的函数:
_syscall3(int, socket, int, family, int, type, int, protocol)
这个函数调用下面的宏:
SYSCALL_FUNC(3, int, socket, int, family, int, type,