首页 新闻 论坛 群组 Blog 文档 下载 读书 Tag 网摘 搜索 开源 FAQ 第二书店 博文视点 程序员
频道: 研发 数据库 中间件 信息化 视频 .NET Java 游戏 移动 服务: 人才 外包 培训
    图书品种:235680
       
热门搜索: ASP.NET Ajax Spring Hibernate Java

3.2  系统调用和设备驱动程序

我们用很少量的函数就可以对文件和设备进行访问和控制。这些函数被称为系统调用,由UNIX(Linux)直接提供,它们也是通向操作系统本身的接口。

操作系统的核心部分,即内核,是一组设备驱动程序。这是一些对系统硬件进行控制的底层接口,我们将在第18章详细讨论设备驱动程序。例如,磁带机就有一个与之对应的设备驱动程序,它知道如何启动磁带、如何对它前后回绕、如何对它进行读写等。它还知道磁带必须以固定长度的数据块为单位进行读写。因为磁带上的数据读写操作完全是线性的,所以该驱动程序并不能直接访问磁带上的数据块.而是必须先把它回绕到正确的位置。

类似地,一个底层的硬盘设备驱动程序一次只能读写一整块硬盘扇区,但却能够直接存取硬盘上任意位置上的数据块,因为硬盘是一种随机存取设备。

为了向用户提供一个统一的接口,设备驱动程序封装了所有与硬件相关的特性。硬件的特有功能可通过ioctl调用来完成。

/dev目录中的设备文件的用法都是一致的,它们都可以被打开、读、写和关闭。例如,用来访问普通文件的open调用同样可以用来访问一台用户终端、一台打印机或一台磁带机。

用来访问设备驱动程序的底层函数(系统调用)包括:

l open:打开文件或设备。

l read:从打开的文件或设备里读数据。

l write:向文件或设备写数据。

l close:关闭文件或设备。

l ioctl:把控制信息传递给设备驱动程序。

系统调用ioctl用来提供一些与特定硬件设备有关的必要控制(与正常输入输出相反),所以它的用法随设备的不同而不同。例如,ioctl调用可以用于回绕磁带机或设置串行口的流控特性。因此,ioctl并不需要具备可移植性。此外,每个驱动程序都定义了它自己的一组ioctl命令。

这些系统调用和其他系统调用的文档一般放在手册页的第二节。提供系统调用参数列表和返回类型的函数原型及相关的# define常量都由include文件提供。每个系统调用特有的特点包括在各个调用的说明中。

查看所有评论(0)条】

最近评论



正在载入评论列表...
热点评论