




























我们可以通过使用一小部分函数来访问和控制文件以及设备,这些函数,就是我们所共知的系统调用(system call),它是直接由Unix和Linux所提供的,是用来访问操作系统本身的接口。
操作系统的核心,也就是内核,其实就是一些设备驱动程序,它们是控制系统硬件的一堆低级接口。比如,有一个磁带设备的设备驱动,它所要达到的就是知道如何启动该磁带,向前卷还是向后卷,读操作还是写操作等等之类的。同时它还要知道磁带的写操作必须操作在一个确定的数据块尺寸内,这是因为磁带都是连续的,驱动程序不能直接访问磁带数据块,而必须卷动磁带到正确的位置。与此类似的,一个低级的硬盘设备驱动程序每次写操作都只能写入若干完整的磁盘扇区里面,而不能直接去访问所请求的磁盘数据块,这是因为磁盘是一个随机访问设备。
为了提供一个类似的接口,设备驱动程序将所有硬件所支持的特性都封装到内部,而一些比较特殊的硬件特性通常则通过使用ioctl(I/O control)系统调用来控制其是否有效。
位于/dev目录下的设备文件通常都如此使用:它们可以被打开、读取、写入以及关闭。例如,通过访问一个用户终端、打印机或者磁带设备来访问一个常规文件,使用的都是一样的open调用。
用来访问设备驱动的这些低级函数——系统调用,都包括:
ioctl系统调用被用来提供一些必需的硬件特定的控制(同常规的输入输出相反),因此它的使用根据设备的不同而不同。举例说明,一个到ioctl的调用可以被用来给一个磁带设备倒带,或者是用来设置一个串行端口的控制字符流。由于这个原因,ioctl不必从一台机器移植到另一台机器。另外,每一种设备都可以由自己来设置本身的ioctl命令。
这些以及其他的系统调用通常都记录在手册的第二部分。原型所提供的参数列表以及函数将为系统调用返回相关的类型,以及与#defines相关联的内容,都被提供在include文件里。当然,每个系统各自所特有的系统调用也都将包含各自独特的调用种类。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。