/*用如下宏来组建命令,保证命令唯一性*/
//一个命令组建的时候包含以下几个部分,有些命令可以带数据
方向类型序列数据
#define _IOC(dir,type,nr,size) \
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))
/*不带数据的命令组建宏*/
#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 LED_ON 1
#define LED_OFF 0
可以改为如下组建方法:
#define MAGIC 'L'
#define LED_ON _IO(MAGIC,1)
#define LED_OFF _IO(MAGIC,0)
//一个命令组建的时候包含以下几个部分,有些命令可以带数据
方向类型序列数据
#define _IOC(dir,type,nr,size) \
(((dir) << _IOC_DIRSHIFT) | \
((type) << _IOC_TYPESHIFT) | \
((nr) << _IOC_NRSHIFT) | \
((size) << _IOC_SIZESHIFT))
/*不带数据的命令组建宏*/
#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 LED_ON 1
#define LED_OFF 0
可以改为如下组建方法:
#define MAGIC 'L'
#define LED_ON _IO(MAGIC,1)
#define LED_OFF _IO(MAGIC,0)