具有定义ioctl函数/usr/include/asm-generic/ioctl.h的定义的内核头文件具有通常应用的宏_IO
,_IOR
,_IOW
和{{1 }}。除此之外,还有一些带有_IOWR
后缀的宏我很好奇。
_BAD
Linux交叉引用服务显示 no 使用它们。 Googling出现了大约十几个Linux内核交叉引用站点,但绝对没有用。
这些宏的意图是什么?它们看起来像非 /* used to create numbers */
#define _IO(type,nr) _IOC(_IOC_NONE,(type),(nr),0)
#define _IOR(type,nr,size) _IOC(_IOC_READ,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOW(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOWR(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),(_IOC_TYPECHECK(size)))
#define _IOR_BAD(type,nr,size) _IOC(_IOC_READ,(type),(nr),sizeof(size))
#define _IOW_BAD(type,nr,size) _IOC(_IOC_WRITE,(type),(nr),sizeof(size))
#define _IOWR_BAD(type,nr,size) _IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))
宏的工作方式相同。也许有人知道他们的历史?
答案 0 :(得分:4)
这是非常古老的代码:http://lkml.iu.edu//hypermail/linux/kernel/0310.1/0019.html
来自:Maciej Zenczykowski
日期:2003年10月8日星期三 - 美国东部时间05:03:01也许我弄错了,但有人可以帮助我 明白为什么在这里介绍_IOR_BAD?先谢谢! :)
为了不破坏用户空间,我们仍然必须支持旧值 同时我们希望新程序开始使用新的正确值 - 因此引入了向后兼容性值。
一般而言,您可能正在寻找的搜索字词是_IOR_BAD lkml