linux 中ioctl 函数集的用途是什么?
What is the purpose of ioctl set of functions in linux?
在 Linux/freeBSD 内核中,每当我们必须为设备创建驱动程序模块时,我们都会在 /dev/ 文件夹中创建一个文件,并使用它与其他进程进行通信。
如果是这样,ioctl 函数集的目的是什么?
无论什么信息,我们要用设备驱动程序传达的信息都可以从这个文件中写入to/read。
谁能解释一下?
我曾尝试在 tldp.org 上阅读它,但无法真正理解它。
ioctl
用于I/O控制,以串口为例。你打开串口设备,可以从串口读取,向串口写入,但是你怎么设置,比如波特率?或者其他控制选项?使用 read
或 write
是不可能的,因为它们用于读取和写入数据 from/to 串口,你需要另一个函数,这就是 ioctl
函数的来源英寸
可以只为 "control" 任务创建另一个设备文件并在其上使用纯 reads/writes,而不是 ioctl。这样就根本不需要 ioctl 了。 Plan 9 操作系统就是这样做的。
事实是 - Unix 系统只是以另一种方式实现。他们总是这样做,因为它没有任何问题,而且很多软件都使用 ioctl,为什么还要改变它?
在 Linux/freeBSD 内核中,每当我们必须为设备创建驱动程序模块时,我们都会在 /dev/ 文件夹中创建一个文件,并使用它与其他进程进行通信。
如果是这样,ioctl 函数集的目的是什么? 无论什么信息,我们要用设备驱动程序传达的信息都可以从这个文件中写入to/read。
谁能解释一下?
我曾尝试在 tldp.org 上阅读它,但无法真正理解它。
ioctl
用于I/O控制,以串口为例。你打开串口设备,可以从串口读取,向串口写入,但是你怎么设置,比如波特率?或者其他控制选项?使用 read
或 write
是不可能的,因为它们用于读取和写入数据 from/to 串口,你需要另一个函数,这就是 ioctl
函数的来源英寸
可以只为 "control" 任务创建另一个设备文件并在其上使用纯 reads/writes,而不是 ioctl。这样就根本不需要 ioctl 了。 Plan 9 操作系统就是这样做的。
事实是 - Unix 系统只是以另一种方式实现。他们总是这样做,因为它没有任何问题,而且很多软件都使用 ioctl,为什么还要改变它?