为啥 IOCTL 命令号在整个系统中应该是唯一的?
Posted
技术标签:
【中文标题】为啥 IOCTL 命令号在整个系统中应该是唯一的?【英文标题】:Why IOCTL command numbers should be unique across the system?为什么 IOCTL 命令号在整个系统中应该是唯一的? 【发布时间】:2019-10-09 21:02:55 【问题描述】:我阅读了选择 ioctl 命令的说明(来自 O'Reilly linux 设备驱动程序):
The ioctl command numbers should be unique across the system in order to prevent
errors caused by issuing the right command to the wrong device.
IOCTL 函数的参数之一(来自用户空间)是文件描述符。 那么如果我调用特定设备,为什么 ioctl 命令号在整个系统中应该是唯一的?
【问题讨论】:
【参考方案1】:IOCTL CMD 在整个系统中不必是唯一的。对于特定的设备节点,它应该是唯一的。但通常的做法是跨系统维护唯一的 CMD 是为了避免向错误的设备发出正确的命令而导致错误。
如果您将特定命令(例如设备 1 的无效 cmd)传递给能够处理 ioctl CMD 将导致成功的错误设备 2,您将得到一些无效数据而不是错误。为了避免这种情况,我们在整个系统中使用唯一的 CMD。
【讨论】:
以上是关于为啥 IOCTL 命令号在整个系统中应该是唯一的?的主要内容,如果未能解决你的问题,请参考以下文章