linux中ioctl函数集的目的是啥?

Posted

技术标签:

【中文标题】linux中ioctl函数集的目的是啥?【英文标题】:What is the purpose of ioctl set of functions in linux?linux中ioctl函数集的目的是什么? 【发布时间】:2015-03-27 09:43:01 【问题描述】:

在 Linux/freeBSD 内核中,每当我们必须为设备制作驱动程序模块时,我们都会在 /dev/ 文件夹中制作一个文件并使用它与其他进程通信。

如果是这样,ioctl 函数集的目的是什么? 无论我们想通过设备驱动程序传达什么信息,都可以从该文件中写入/读取。

谁能解释一下?

我曾尝试在 tldp.org 上阅读有关它的内容,但无法真正理解它。

【问题讨论】:

@JoachimPileborg 你应该回答这个问题 【参考方案1】:

ioctl 用于 I/O 控制,以串口为例。您打开串口设备,可以从串口读取,并写入串口,但是您如何设置例如波特率?还是其他控制选项?使用readwrite 是不可能的,因为它们用于从/向串行端口读取和写入数据,为此您需要另一个函数,这就是ioctl 函数的用武之地。

【讨论】:

【参考方案2】:

可以为“控制”任务创建另一个设备文件,并在其上使用普通的读/写,而不是 ioctl。这样就完全不需要 ioctl 了。 Plan 9 操作系统就是这样做的。

问题是 - Unix 系统只是以另一种方式做到这一点。他们总是这样做,而且既然它并没有什么问题,而且很多软件都使用 ioctl,为什么还要费心去改变它呢?

【讨论】:

谢谢,几乎没有看到任何地方提到过这个。 'ioctl' 对我来说似乎与读写没有什么不同 - 除了在这种情况下它是元数据。

以上是关于linux中ioctl函数集的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Linux下利用ioctl函数获取网卡信息

(10)Linux 网络编程之ioctl函数

Linux下ioctl函数理解

Linux下利用ioctl函数获取网卡信息

(二十)linux中i2c的ioctl,write,read函数的使用

麻烦问一下Linux下GPIO驱动的问题,ioctl函数和write函数有啥区别,