在Linux用户空间中,我们常常需要调用系统调用。下面我们以Linux2.6.37版本为例,跟踪一下read系统调用的实现。不同版本的Linux系统调用实现可能会有所不同。
在一些应用程序中,我们可以看到如下定义:
scssCopy code
#define real_read(fd, buf, count ) (syscall(SYS_read, (fd), (buf), (count)))
实际上,真正调用的是系统函数syscall(SYS_read),即sys_read()函数。在Linux2.6.37版本中,该函数是通过几个宏定义实现的。
Linux系统调用(SCI,system call interface)实际上是一个多路汇聚以及分解的过程,汇聚点是0x80中断入口点(X86系统结构)。也就是说,所有系统调用都从用户空间中汇聚到0x80中断点,同时保存具体的系统调用号。当0x80中断处理程序运行时,将根据系统