我应该如何实现我的设备写入功能?

时间:2018-12-05 20:05:55

标签: c unix

我在部分游戏项目上遇到麻烦。对于项目,我们应该为骰子创建一个设备驱动程序,稍后在项目中实现该骰子。我的问题是我的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也没有输出,这就是我想要的(程序是一个骰子的侧面不同的游戏,因此我需要编写一个两侧增加新编号)。谁能帮我弄清楚如何正确编写代码?

0 个答案:

没有答案