syscall - linux

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

Linux_kernel_interfaces - syscall

描述

syscall()是一个执行系统调用的小型库函数,汇编语言接口具有指定参数的指定编号。

syscall()非常有用,如,在调用C库中没有包装器函数的系统调用时。

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);