控制设备函数
ioctl
用户程序通过命令码(request)告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。
在ioctl中命令码是唯一联系用户程序命令和驱动程序支持的途径。 命令码的组织是有一些讲究的,因为我们一定要做到命令和设备是一一通过switch{case}对应的。
由于命名码不直观,Linux Kernel中提供了一些宏。这些宏可根据便于理解的字符串生成命令码,或者是从命令码得到一些用户可以理解的字符串以标明这个命令对应的设备类型、设备序列号、数据传送方向和数据传输尺寸。理解request命令码是怎么在用户程序里生成并在驱动程序里解析的,程序员最主要的工作量在switch{case}结构中,因为对设备的I/O控制都是通过这一部分的代码实现的。
大纲
#inlclude <sys/ioctl.h>
int ioctl(int fd,unsigned long request,...);
描述
ioctl()系统调用常用于特殊文件的重点设备参数。
request:指定,大多数操作特征指定文件(e.g. 终端),可以使用ioctl()请求控制指定文件。
fd: fd参数必须是一个可以开启的文件描述符。
第二个参数是一个设备附属的请求符。第三个参数是一个非典型存储指针。
ioctl()请求被编码,无论参数时,一个输入参数或者一个输出参数,
返回值
返回值 | 成功 | 失败 |
---|---|---|
0/输出参数 | -1/error |