C|库函数调用和系统调用区别何在(c语言调用库函数)

简单说,库函数(library function)调用是语言或应用程序的一部分,而系统API调用是操作系统的一部分,系统调用是在操作系统内核发现一个“trap(自陷)”或中断后进行的。毫无疑问,两者都是用相同的编程语言编写的。

库函数调用

系统API调用

在所有的ANSI C编译器版本中,C函数库是相同的

各个操作系统的系统调用是不同的

调用的是函数库中的一个程序

调用的是系统内核的服务

与用户程序相联系

是操作系统的一个进入点

在用户地址空间执行

在内核地址空间执行

它的运行时间属于“用户”时间

它的运行时间属于“系统”时间

属于过程调用,

开销较小

需要切换到内核上下文环境然后切换回来,开销较大

在C函数库libc中有大约300个程序

在UNIX中有大约90个系统调用

典型的C函数库调用:

system, fprintf,malloc

典型的系统调用:

chdir, fork, write,brk

用文件指针(file pointer)来标识文件

用文件描述符(file descriptor)来标识文件

库函数调用通常比行内展开的代码(也就是inline函数)慢,因为它需要付出函数调用的开销。但系统调用比库函数调用还要慢很多,因为它需要把上下文环境切换到内核模式。在SPARC工作站上,一个库函数调用大约是半微秒。系统调用所需要的时间大约是库函数调用的70倍(35微秒)。纯粹从性能上考虑,你应该尽可能地减少系统调用的数量。但是,你必须记住,很多C函数库中的程序通过系统调用来实现功能。

ref:

Perter Van Der Linden《Expert C Programming Deep C Secrets》

-End-

原文链接:,转发请注明来源!