系统调用和设备驱动程序:
只需少量的函数就可以对文件和设备进行访问和控制。这些函数成为
系统调用。由linux直接提供,它们是通向操作系统的接口。
操作系统的核心部分,即内核,是一组
设备驱动程序。它们是一组对系统硬件进行控制的底层接口。
为了向用户提供一个一致的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能可通过ioctl系统调用来提供。所以/dev目录中的设备驱动文件用法都是相同的。都可以被打开、关闭、读、写。下面是用于访问设备驱动程序的底层函数(系统调用)。
open |
打开文件或设备 |
close |
关闭文件或设备 |
read |
从打开的文件或设备读数据 |
write |
向文件或设备写数据 |
ioctl |
把控制信息传递给设备驱动程序 |
库函数:
针对输入输出操作使用底层系统调用效率非常低,因为
- 使用系统调用会影响系统性能。因为在执行系统调用时,linux必须从运行用户代码切换到执行内核代码,然后再返回用户代码。
- 硬件会限制对底层调用一次所能读写的数据块大小。例如,磁带通常每次读写数据块长度为10K,如果试图写的数据量不是10K的整数倍,磁带机会以10K为单位卷绕磁带,从而留下空隙。
它们之间关系可以用下图表示: