Linux kernel Linux';socketcall';系统调用实现

Linux kernel Linux';socketcall';系统调用实现,linux-kernel,system-calls,Linux Kernel,System Calls,在linux中,所有与套接字相关的系统调用都被选通并抛出一个名为的系统调用。其处理程序位于/net/socket.c中。正如我们所期望的那样,参数有一个来自用户的副本,然后所有套接字函数都有一个开关 我希望在每种情况下都能看到对普通函数的调用,但似乎有对另一个系统调用的调用。例如,“套接字”的情况: case SYS_SOCKET: err = sys_socket(a0, a1, a[2]); break; sys_socket在/net/socket.c中也定义为: SY

在linux中,所有与套接字相关的系统调用都被选通并抛出一个名为的系统调用。其处理程序位于
/net/socket.c
中。正如我们所期望的那样,参数有一个来自用户的副本,然后所有套接字函数都有一个开关

我希望在每种情况下都能看到对普通函数的调用,但似乎有对另一个系统调用的调用。例如,“套接字”的情况:

case SYS_SOCKET:
    err = sys_socket(a0, a1, a[2]);
    break; 
sys_socket在
/net/socket.c
中也定义为:

SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)

我的问题是为什么它的定义是这样的。我想这是为了向后兼容,或者我在某个地方出错了?

man 2 socketcall
这样说

注释 在一些架构上,例如ia64,没有socketcall()系统调用;而是套接字(2)、接受(2)、绑定(2)等等 作为单独的系统调用实现

因此,在x86的情况下,
socketcall
调度程序仅用于
x86_32
,而
x86_64
对每个套接字API使用单独的系统调用