gpt4 book ai didi

c - Linux 字符设备驱动程序返回骰子 - 通过 read() 命令访问

转载 作者:行者123 更新时间:2023-11-30 19:47:53 25 4
gpt4 key购买 nike

我们正在做一个涉及 Yahtzee 的项目,我的系统类简介中,我不太明白设备驱动程序是如何工作的。我的 Yahtzee 程序功能齐全,但我当前只是从随机整数文件中读取。

我的大部分驱动程序都使用提供给我们的“示例”驱动程序进行设置。目标是将骰子返回给用户。我在使用该算法时遇到问题 - 我使用以下函数作为辅助函数来返回单个字节:

unsigned char get_random_byte(int max) {
unsigned char c;
get_random_bytes(&c, 1);
return c%max;
}

我知道我应该先获取这些位并将它们组合起来,然后再对总计执行 mod 6 操作并添加 1 以写入文件指针。在伪代码中:

(TOTAL_OF_BITS % 6) + 1

但是,对于函数的参数,我不知道如何执行此操作。它应该与读取命令一起使用:

static ssize_t dice_read(struct file * file, char * buf, size_t count, loff_t *ppos)

我将它与读取命令 read(dice[i], sizeof(int), 1, fp) 进行比较,发现我应该将结果分配给文件,但除此之外,我不知道如何继续。它的大小也取决于 buf 变量,对吗?

部分问题是我对设备驱动程序的了解一开始就很不稳定。有人可以帮我吗?我很感谢您投入的时间和精力。

最佳答案

这是我使用的读取方法:

static ssize_t dice_read(struct file * file, char * buf,
size_t count, loff_t *ppos)
{
int i;
char* data;

if(count == 0){
return 0;
}
data = kmalloc(count, GFP_KERNEL);

for(i = 0; i < count; i++){
data[i] = get_random_byte(6) + 1;
}

if(copy_to_user(buf, data, count)){
kfree(data);
}


*ppos+=count;
return *ppos;
}

重申一下,我处理随机数的方法是:

unsigned char get_random_byte(int max) {
unsigned char c;
get_random_bytes(&c, 1);
return c%max;
}

关于c - Linux 字符设备驱动程序返回骰子 - 通过 read() 命令访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20179651/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com