红联Linux门户
Linux帮助

ioctl()中cmd的数据类型问题?

发布时间:2009-04-02 10:25:57来源:红联作者:yyyhhh1818
程序如下:
----------------------------------------------------------------------------
#define MOTOR_MAGIC 'k'
#define SET_PULSE _IOW(MOTOR_MAGIC, 1,int)
.
.
static int motor_ioctl(struct inode *inode,struct file *filp,unsigned int cmd,unsigned long arg)
{ int data=0;
int retval;
switch (cmd) {
case SET_PULSE:
if (copy_from_user(&data, (int *)arg, sizeof(int)))
return -EFAULT;
.
.
.
}
---------------------------------------------------------------------------
“cmd”要求是个无符号的整数,可是 “SET_PULSE”是什么数据类型?
由宏定义可得出:
#define SET_PULSE _IOW('k' , 1,int)
k是字符,怎么与整数相或?得出的是什么类型数据?
文章评论

共有 2 条评论

  1. yyyhhh1818 于 2009-04-03 08:27:07发表:

    明白了,多谢wang7131984朋友指点!

  2. wang7131984 于 2009-04-02 10:41:51发表:

    SET_PLUSE应该是某个头文件中定义的宏吧。k固然是字符,但是字符也是2进制数怎么就不能与整数或了呢。得到数应该是整数,因为字符在与整数运算的过程中进行了转换,至于最后的实际结果要取决与你是否进行了强制类型转换。