- Linux程序设计(第4版)
- (英)Neil Matthew Richard Stones
- 687字
- 2021-04-09 20:04:43
3.2 系统调用和设备驱动程序
你只需用很少量的函数就可以对文件和设备进行访问和控制。这些函数被称为系统调用,由UNIX(和Linux)直接提供,它们也是通向操作系统本身的接口。
操作系统的核心部分,即内核,是一组设备驱动程序。它们是一组对系统硬件进行控制的底层接口。例如,磁带机就有一个与之对应的设备驱动程序,它知道如何启动磁带、如何对它前后回绕、如何对它进行读写等。它还知道磁带必须以固定长度的数据块为单位进行读写。因为磁带在实质上是一个顺序存取设备,所以驱动程序并不能直接访问磁带上的数据块.而是必须先把它回绕到正确的位置。
为了向用户提供一个一致的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能通常可通过ioctl(用于I/O控制)系统调用来提供。
/dev目录中的设备文件的用法都是相同的,它们都可以被打开、读、写和关闭。例如,用来访问普通文件的open调用同样可以用来访问用户终端、打印机或磁带机。
下面是用于访问设备驱动程序的底层函数(系统调用)。
❑ open:打开文件或设备。
❑ read:从打开的文件或设备里读数据。
❑ write:向文件或设备写数据。
❑ close:关闭文件或设备。
❑ ioctl:把控制信息传递给设备驱动程序。
系统调用ioctl用于提供一些与特定硬件设备有关的必要控制(与正常的输入输出相反),所以它的用法随设备的不同而不同。例如,ioctl调用可以用于回绕磁带机或设置串行口的流控特性。因此,ioctl并不需要具备可移植性。此外,每个驱动程序都定义了它自己的一组ioctl命令。
这些系统调用和其他系统调用的文档一般放在手册页的第二节。提供系统调用参数列表和返回类型的函数原型及相关的#define常量都由include文件提供。每个系统调用独有的要求可参见各个系统调用的说明。