Linux'socketcall'系统调用实现

时间:2013-09-23 10:10:18

标签: linux-kernel system-calls

在linux中,所有与套接字相关的系统调用都是gated抛出一个名为socketcall的系统调用。它的处理程序在/net/socket.c中找到。正如人们所期望的那样,参数有一个copy_from_user,然后是所有套接字函数的开关。

我希望在每种情况下看到一个普通函数的调用,但似乎有另一个系统调用的调用。例如'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 个答案:

答案 0 :(得分:2)

man 2 socketcall

  

NOTES       在一些体系结构上,例如ia64,没有socketcall()系统调用;而是socket(2),accept(2),bind(2)等等   实现为单独的系统调用

因此,如果x socketcall调度程序仅用于x86_32,只要x86_64对每个套接字API使用单独的系统调用。