库函数调用是语言或应用程序本身的一部分,而系统函数调用是内核提供给应用程序的接口,属于系统的一部分且其是在操作系统内核发现一个“trap”或中断后进行的(其中系统调用是软中断)。
库函数 vs 系统调用
** | 前者 | 后者 |
---|---|---|
兼容性 | 在所有的ANSI C编译器版本中,C库函数是相同的 | 各个操作系统的系统调用是不同的 |
* | 在用户地址空间执行 | 在内核地址空间执行 |
* | 属于过程调用,调用开销较小 | 需要在用户空间和内核上下文环境间切换,开销较大 |
规模 | 在C函数库libc中有大约300个函数 | 在UNIX中大约有90个系统调用 |
etc. | … | … |
实例说明
Linux下对文件操作有两种方式:系统调用(system call)和库函数调用(Library functions)。