Linux中应用程序编程接口API和系统调用的关系
API(Application Prigramming Interface)
指程序员在编写应用程序时调用的函数接口,如read (), write (), malloc (), free ()等,这些API在glibc库中实现。
系统调用
通过软中断或系统调用指令向内核发送一个明确的请求,内核根据请求调用对应的系统服务例程,如:SYSCALL系统调用指令,sys_read (), sys_write ()系统服务例程。
如图:以xyz () 接口为例
应用程序在执行过程中会调用xyz()函数,xyz()执行SYSCALL(系统调用指令),SYSCALL指令会把cpu从用户态切换到内核态。SYACALL指令中会包含将要调用的“系统调用服务例程”的系统调用号和参数,内核在上图“系统调用处理程序”中去查一个sys_call_talbe数组来找到这个系统调用号对应的服务例程(sys_xyz())函数的地址,然后调用这个地址的函数。(这里glibc里面的系统调用号和内核里面的系统调用号必须完全相等,当然,这是约定好的)