У меня проблемы с частью игрового проекта.Для проекта мы должны создать драйвер устройства для игры в кости, который мы реализуем позже в проекте.Моя проблема в том, что моя функция 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, что я и хочу (программа - игра, в которой стороны игральных костей различаются, поэтому мне нужно написать новое число в стороны).Может кто-нибудь помочь мне разобраться, как правильно реализовать запись?