linux中socket()函数实现的位置

时间:2012-04-06 02:49:30

标签: linux sockets

在Linux中,要创建套接字,我们包含sys / socket.h头文件并使用socket()函数。头文件位于/usr/include/sys/socket.h。

extern int socket (int __domain, int __type, int __protocol) __THROW;

任何人都可以告诉实际实现socket()函数的位置。

感谢。

3 个答案:

答案 0 :(得分:4)

NOTE:事实上, int socket (int __domain, int __type, int __protocol) __THROW

在glibc中实现,

并且glibc调用内核文件net/socket.c中实现的内核函数sys_socket。

asmlinkage long sys_socket(int family, int type, int protocol);

答案 1 :(得分:1)

socket(2)ssytem call Glibc 中的socket函数只是一个很小的包装器,可以进行真正的系统调用。

从应用程序的角度来看,系统调用是 atomic ;换句话说,运行Linux应用程序的虚拟机是 x86 计算机(非特权指令集),增加了内核提供的300多个系统调用。另请参阅Assembly Howto,其中说明了如何编码系统调用。详细了解linux kernel以及syscalls(2)intro(2)手册页。

关于套接字的真正工作是在内核中完成的,它是网络子系统。

答案 2 :(得分:0)

这是=> socket.c

通常大多数套接字函数(包括这个函数)只是系统调用的包装(直接调用内核),因此全部由全能内核本身处理。

以下是内核的实现:SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol){...}