系统调用和库函数

来源:互联网 发布:淘宝卖盗版视频课程 编辑:程序博客网 时间:2024/06/08 04:44
PS:开发也有一两年了,以前学的太草,结果还是要回头继续深造。今天就简单记个关于系统调用和库函数的笔记。

定义:系统调用,顾名思义就是系统要调用的函数,算是比较底层的函数调用了。此类函数主要面向硬件。库函数就是标准c语言库提供的供用户调用的面向应用程序开发的接口。
区别:从定义看来,好像系统调用是系统调用的函数,离我们很远。其实,我们当然也是可以调用的啦。我们不仅可以调用,而且系统调用的效率要比库函数的效率是要高的。为什么呢?这是因为库函数最终还是借助调用系统调用来实现自己的功能的,因为库函数最终还是要对硬件进行读写,而对硬件进行读写必然还是要通过系统调用实现。
既然如此,为什么还存在库函数,我们直接通过系统调用对文件进行读写不就完了,还要库函数什么用!
库函数既然存在当然有它存在的理由了!

1. 缓冲区**
读写文件通常是大量的数据(这种大量是相对于底层驱动的系统调用所实现的数据操作单位而言),这时,使用库函数就可以大大减少系统调用的次数,这就是我们平时经常听到的缓冲技术-缓冲区。例如用fwrite写文件,都是先将内容写到用户空间缓冲区,当用户空间缓冲区满或者写操作结束时,才将用户缓冲区的内容写到内核缓冲区,同样的道理,当内核缓冲区满或写结束时才将内核缓冲区内容写到文件对应的硬件媒介。
2. 可移植性**
库函数调用通常用于应用程序中对一般文件的访问。
系统调用通常用于底层文件访问(low-level file access),例如在驱动程序中对设备文件的直接访问
系统调用是操作系统相关的,因此一般没有跨操作系统的可移植性(各个系统的系统调用是不同的)。
库函数调用是系统无关的,因此可移植性好。
实际应用中我们主要考虑以上两个方面来决定是否使用系统调用。当然更深层次还有两个却别:
3. 底层调用本身的一些性能方面的缺陷**
4. 让api也可以有了级别和专门的工作面向**

0 0
原创粉丝点击