Chinaunix首页 | 论坛 | 博客
  • 博客访问: 19912401
  • 博文数量: 679
  • 博客积分: 10495
  • 博客等级: 上将
  • 技术积分: 9308
  • 用 户 组: 普通用户
  • 注册时间: 2006-07-18 10:51
文章分类

全部博文(679)

文章存档

2012年(5)

2011年(38)

2010年(86)

2009年(145)

2008年(170)

2007年(165)

2006年(89)

分类: LINUX

2008-11-19 15:30:36

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

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

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

可通过ioctl调用来完成。

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

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

􀂉 open:打开文件或设备。

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

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

􀂉 close:关闭文件或设备。

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

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

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

 

阅读(3121) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~