我在部分游戏项目上遇到麻烦。对于项目,我们应该为骰子创建一个设备驱动程序,稍后在项目中实现该骰子。我的问题是我的dice_write()函数似乎不起作用,甚至根本无法达到。我想知道这是由于驱动程序代码还是我在项目中实现它的方式。
这是驱动程序.c文件的相关部分:
static int SIDES = 6;
unsigned char get_random_byte(int max)
{
unsigned char c;
get_random_bytes(&c, 1);
return ((c%max)+1);
}
//dice_read omitted (it works fine)
static ssize_t dice_write(struct file * file, const char * buf, size_t count, loff_t *ppos)
{
printk(KERN_ERR "WRITE");
int j;
int len = sizeof(int);
if(*ppos != 0)
{
return 0;
}
if(copy_from_user(buf, j, 1))
{
return -EINVAL;
}
*ppos = len;
SIDES = j;
printk(KERN_ERR "\nSides: %d",SIDES);
//printk(KERN_ERR "write(file, 0x%p, %d, %lld)\n", buf, count, *ppos);
return len;
}
这是我在项目中的实现方式:
int roll(int sides)
{
unsigned int roll;
int i = open("/dev/dice", O_RDWR);
write(i, &sides, sizeof(int));
read(i, &roll, sizeof(int));
close(i);
printf("ROLL: %d\n",roll);
return roll;
}
当前读取有效,但是写入无效,因此SIDES永远不会更新,并且printks也没有输出,这就是我想要的(程序是一个骰子的侧面不同的游戏,因此我需要编写一个两侧增加新编号)。谁能帮我弄清楚如何正确编写代码?