syscall - Linux

syscall是用户态下的应用与Linux内核交互的主要机制,是应用程序和Linux内核间的基础接口,处理各个组件与用户空间的通信。

 

Linux_kernel_interfaces - syscall

描述

syscall()是一个执行系统调用的小型库函数,其汇编语言接口具有指定参数的指定编号。syscall()非常有用,例如,在调用C库中没有包装器函数的系统调用时,使用syscall()非常有用。

syscall()在进行系统调用前保存CPU寄存器,在系统调用返回时恢复寄存器,如果发生错误,则将系统调用返回的错误代码存储在errno(3)中。

返回值

返回值由被调用的系统调用定义。通常,0返回值表示成功。返回值-1表示错误,错误代码存储在errno中。

调用不会导致切换到内核模式,实际的系统调用确实将控制转移到内核。

示例

write(1, "hello, world!\n", 14);

system call,不同操作系统下SYS_write的值不同,但都是调用号。

syscall(SYS_write, 1, "hello, world!\n", 14);