Linux的'socketcall'系统调用实现

3
在Linux中,所有与套接字相关的系统调用都通过一个名为socketcall的系统调用进行门控。它的处理程序可以在/net/socket.c中找到。正如人们所期望的那样,这里有一个复制来自用户的参数的函数,然后是一个用于所有套接字函数的开关语句。
我原本期望在每种情况下都会调用普通函数,但似乎有其他系统调用的调用。例如,“socket”的情况:
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)

我的问题是为什么它被定义成这样。我猜这是为了向后兼容性,或者我犯了某个错误?
1个回答

2

man 2 socketcall表示:

注释 在一些体系结构上,例如ia64,没有socketcall()系统调用;相反,socket(2),accept(2),bind(2)等实际上是作为单独的系统调用实现的。

因此,在x86的情况下,socketcall分发器仅适用于x86_32,而x86_64对于每个socket API使用单独的系统调用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接