2
具有用於定義ioctl函數的定義的內核頭文件/usr/include/asm-generic/ioctl.h具有常用和常用的宏_IO
,_IOR
,_IOW
和_IOWR
。在這些旁邊,還有幾個宏,其中有我感興趣的_BAD
後綴。_IOR_BAD和_IOW_BAD的用途是什麼?
/* 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))
Linux的交叉引用服務顯示沒有使用它們。 Googling出現了十幾個Linux內核交叉引用網站,但絕對沒有用處。
這些宏的意圖是什麼?它們看起來像它們的工作方式與非_BAD
宏一樣。也許有人知道他們的歷史?
哇哦!:這是十年前!感謝您的發現。 – wallyk
另外,請注意,這現在是公共API的一部分,所以它可能永遠留在這個文件中。 –