库函数与系统调⽤的联系与区别
⼀. 概念
系统调⽤(:system call),指运⾏在的向请求某些服务的调⽤过程。系统调⽤提供了⽤户程序与之间的接⼝。⼀般来说,系统调⽤都在内核态执⾏。由于系统调⽤不考虑平台差异性,由内核直接提供,因⽽移植性较差(⼏乎⽆移植性)。
库函数(library function),是由⽤户或组织⾃⼰开发的,具有⼀定功能的函数集合,⼀般具有较好平台移植性,通过库⽂件(静态库或动态库)向程序员提供功能性调⽤。程序员⽆需关⼼平台差异,由库来屏蔽平台差异性。
⼆,区别
调⽤※函数库调⽤ VS 系统
函数库调⽤系统调⽤
平台移植性好依赖于内核,不保证移植性
调⽤函数库中的⼀段程序(或函数)调⽤系统内核的服务
printf和scanf有什么不同⼀个普通功能函数的调⽤是操作系统的⼀个⼊⼝点
在⽤户空间执⾏在内核空间执⾏
它的运⾏时间属于“⽤户时间”它的运⾏时间属于“系统”时间
属于过程调⽤,调⽤开销较⼩在⽤户空间和内核上下⽂环境间切换,开销较⼤
库函数数量较多UNIX中⼤约有90个系统调⽤,较少
典型的C函数库调⽤:printf scanf malloc 典型的系统调⽤:fork open write
三. 联系
⼀般⽽⾔,跟内核功能与操作系统特性紧密相关的服务,由系统调⽤提供;
具有共通特性的功能⼀般需要较好的平台移植性,故⽽由库函数提供。
库函数与系统调⽤在功能上相互补充,如进程间通信资源的管理,进程控制等功能与平台特性和内核息息相关,必须由系统调⽤来实现。
⽂件 I/O操作等各平台都具有的共通功能⼀般采⽤库函数,也便于跨平台移植。
某些情况下,库函数与系统调⽤也有交集,
如库函数中的I/O操作的内部实现依然需要调⽤系统的I/O⽅能实现。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论