ioctl方法

来源:互联网 发布:淘宝评价采集工具 编辑:程序博客网 时间:2024/05/16 04:36

ioctl命令格式:

0~7位8~15位16~28位29~31位NR 8位Type 8位Size 13位Dir 3位

ioctl定义命令的宏:

#define _IOC_NONE1U#define _IOC_READU#define _IOC_WRITE4U#define _IOC(dir,type,nr,size)\((unsigned int)\ (((dir)  << _IOC_DIRSHIFT) |\  ((type) << _IOC_TYPESHIFT) |\  ((nr)   << _IOC_NRSHIFT) |\  ((size) << _IOC_SIZESHIFT)))/* used to create numbers */#define _IO(type,nr)_IOC(_IOC_NONE,(type),(nr),0)#define _IOR(type,nr,size)_IOC(_IOC_READ,(type),(nr),sizeof(size))#define _IOW(type,nr,size)_IOC(_IOC_WRITE,(type),(nr),sizeof(size))#define _IOWR(type,nr,size)_IOC(_IOC_READ|_IOC_WRITE,(type),(nr),sizeof(size))/* used to decode them.. */#define _IOC_DIR(nr)(((nr) >> _IOC_DIRSHIFT) & _IOC_DIRMASK)#define _IOC_TYPE(nr)(((nr) >> _IOC_TYPESHIFT) & _IOC_TYPEMASK)#define _IOC_NR(nr)(((nr) >> _IOC_NRSHIFT) & _IOC_NRMASK)#define _IOC_SIZE(nr)(((nr) >> _IOC_SIZESHIFT) & _IOC_SIZEMASK)/* ...and for the drivers/sound files... */#define IOC_IN(_IOC_WRITE << _IOC_DIRSHIFT)#define IOC_OUT(_IOC_READ << _IOC_DIRSHIFT)#define IOC_INOUT((_IOC_WRITE|_IOC_READ) << _IOC_DIRSHIFT)#define IOCSIZE_MASK(_IOC_SIZEMASK << _IOC_SIZESHIFT)#define IOCSIZE_SHIFT(_IOC_SIZESHIFT)


范例代码:

#define MEM_MAGIC 'm'#define MEM_SET _IOW(MEM_MAGIC,0,int)



0 0