系统调用与库函数的区别

理解库函数的区别和系统调用,首先要里理解Unix的kernel mode和user mode。考虑下面的函数段:

int main()

{

    int fd = create("filename",0666);

    exit(0);
}

在执行main函数时,是在user mode下执行,当遇到create函数时,继续在user mode下执行。然后系统将两个参数"filenam"和"0666"压入栈中或者某个寄存器,接着执行库函数create。在库函数create执行开始,系统仍然处在user mode下,接着系统将create系统调用的unique number压入寄存器(比如说r0),然后执行指令trap(operating system trap)使系统进入kernel mode,并且处理系统调用。这时,系统意识到要进行系统调用的invoke,于是从寄存器r0中取出create系统调用的unique number,从系统调用表中查找得知要invoke的系统调用是create,然后执行。执行完毕后返回库函数create的调用,库函数负责检查系统调用的执行情况(检查某些寄存器的值),然后库函数create根据检查的结果返回相应的值。

在这里,trap指令类似于一个系统中断,而系统调用create是一个特殊的中断处理函数(inerrupt handler)。

操作系统的主要功能是为应用程序的运行创建良好的环境,为了达到这个目的,内核提供一系列具备预定功能的多内核函数,这一组函数就被统称为系统调用。系统调用把应用程序的请求传给内核,调用相应的的内核函数完成所需的处理

库函数一般是指编译器提供的可在c源程序中调用的函数。可分为两类,一类是c语言标准规定的库函数,一类是编译器特定的库函数。通过一些库函数可以间接的进行系统调用,完成相应功能。

更多嵌入式linux及编程学习交流的文章,请访问我的个人网站”恩享网” :http://www.enxiang.icoc.cc,期待与您共同进步。

原文地址:https://www.cnblogs.com/LJTbozai/p/3033187.html