分类: LINUX
2008-11-19 15:30:36
我们用很少量的函数就可以对文件和设备进行访问和控制。这些函数被称为系统调用,由UNIX(Linux)直接提供,它们也是通向操作系统本身的接口。
操作系统的核心部分,即内核,是一组设备驱动程序。这是一些对系统硬件进行控制的底层接口,我们将在第18章详细讨论设备驱动程序。例如,磁带机就有一个与之对应的设备驱动程序,它知道如何启动磁带、如何对它前后回绕、如何对它进行读写等。它还知道磁带必须以固定长度的数据块为单位进行读写。因为磁带上的数据读写操作完全是线性的,所以该驱动程序并不能直接访问磁带上的数据块.而是必须先把它回绕到正确的位置。
为了向用户提供一个统一的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能
可通过ioctl调用来完成。
/dev目录中的设备文件的用法都是一致的,它们都可以被打开、读、写和关闭。例如,用来访问普通文件的open调用同样可以用来访问一台用户终端、一台打印机或一台磁带机。
用来访问设备驱动程序的底层函数(系统调用)包括:
open:打开文件或设备。
read:从打开的文件或设备里读数据。
write:向文件或设备写数据。
close:关闭文件或设备。
ioctl:把控制信息传递给设备驱动程序。
系统调用ioctl用来提供一些与特定硬件设备有关的必要控制(与正常输入输出相反),所以它的用法随设备的不同而不同。例如,ioctl调用可以用于回绕磁带机或设置串行口的流控特性。因此, ioctl并不需要具备可移植性。此外,每个驱动程序都定义了它自己的一组ioctl命令。
这些系统调用和其他系统调用的文档一般放在手册页的第二节。提供系统调用参数列表和返回类型的函数原型及相关的# define常量都由include文件提供。每个系统调用特有的特点包括在各个调用的说明中。