正在尝试实现IOCTL命令,遇到如下情况:
如果_IO同时用于读取和写入
那么为什么我应该考虑_IOR和_IOW呢?
有什么线索吗?
发布于 2013-05-20 14:50:25
实际上,_IO是为根本不带任何参数的ioctls准备的。例如,假设您想要触发一个先前在驱动程序中设置的命令,您可能根本不需要传递任何数据!
_IOWR用于传入和传出参数的ioctls。在我的经验中,这种情况很少见,而且可能会让人感到困惑,因为一个参数用于两个非常不同的目的,但当您需要它时,它可能会很有用。
查看http://www.mjmwired.net/kernel/Documentation/ioctl-number.txt的开头部分
内核中没有强制执行方向的任何内容,因此它主要用于文档目的。
发布于 2013-05-22 10:31:14
_IOR -用于从设备到用户空间应用程序的读取,_IOW -写入从用户空间应用程序到设备(硬件)的数据,以及_IOWR -用于从/向设备读取/写入数据。但_IO -主要用于向目标设备发送设备可配置命令,例如,如果您想要读/写闪存,则需要首先发送命令,然后从/向闪存读取/写入数据。由于读/写命令是闪存数据表中规定的常量/固定命令,因此不需要显式地从用户空间app向驱动程序ioctl发送/传递命令,因此您可以在_IO ioctl情况下根据需要形成命令包并将其发送到闪存。_IO -告诉你不必从用户空间应用程序中传递数据(命令),你在驱动程序中已经使用了硬编码的读/写命令并将命令发送到目标设备。_IOR或_IOW或_IOWR用于读取/写入从用户空间应用程序到/从设备(例如:闪存)传递的易失性数据。希望这个答案能澄清你的疑问:-)。
https://stackoverflow.com/questions/16642552
复制相似问题