【写在前面】
网上资料梳理,侵删烦请联系。或有表达错误,欢迎指出纠正。
是什么
设备驱动程序中对设备的I/O通道进行管理的函数。
有何用
对I/O通道进行管理:
对设备的特性进行控制。如串口的传输波特率、马达转速等。
一个字符设备驱动通常会实现设备打开、关闭、读写等功能。若需要扩展新功能,通常以增设ioctl()命令的方式实现。
如何用
- 用户空间ioctl调用
int ioctl(int fd, int cmd, …);
//让设备fd做cmd操作。
fd—文件描述符。用户程序打开设备时使用open函数返回的文件标示符;
cmd—交互协议。设备驱动将根据cmd执行对应操作。用户程序对设备的控制命令;
…—可变参数。依赖cmd指定长度及类型。是一些补充参数,一般最多一个,这个参数的有无和cmd的意义相关。
函数执行成功时返回0,失败返回-1.
- ioctl实现
若驱动程序提供了对ioctl的支持,用户就可以在用户程序中使用ioctl函数来控制设备的I/O通道。
用户程序所作的只是通过命令码(cmd)告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做的事情。