1.2系统调用和库函数
操作系统用户接口 | |
---|---|
命令接口 | 以命令形式呈现在用户面前,方便用户直接或者间接控制自己的电脑 |
程序接口 | 为应用程序使用系统功能而设置,是应用程序取得操作系统服务的唯一途径。由一系列系统调用组成,每一个系统调用都是一个能完成特定功能的子程序 |
图形接口 | 采用了图形化的操作界面,将各种应用程序和文件,直观、逼真地表示出来 |
系统调用是内核提供地程序接口,是应用程序和硬件设备之间的中间层:
为应用程序提供了服务和硬件抽象能力,例如,当需要读文件时,应用程序可以不管磁盘类型和介质,甚至不用去管文件所在的文件系统到底是哪种类型;
系统调用保证了系统的稳定和安全;
每个进程都运行在虚拟系统中。
Linux根据不同的版本有240到260个系统调用
系统调用类型 | |
---|---|
文件操作类系统调用 | 如打开、创建、读取、删除、修改文件 |
进程控制类系统调用 | 如创建进程、设置或获取进程属性 |
通信类系统调用 | 创建进程之间的通信连接,发送、接收信息,或其它的通信方式 |
设备管理类系统调用 | 打开、关闭和操作设备 |
信息维护类系统调用 | 在用户程序和OS之间传递信息。例如,系统向用户程序传送当前时间、日期、操作系统版本号等 |
系统调用和C库函数之间并不是一一对应的关系,可能几个不同的函数会调用到同一个系统调用;
并非所有的库函数都会调用系统调用,例如,printf函数会调用write系统调用以输出一个字符串,但strcpy和atoi函数则不会使用任何系统调用。
一般而言,应用程序使用API而不是直接使用系统调用来编程。