我正在做一个涉及Yahtzee的项目,这是我在系统课程的简介,而我不太了解设备驱动程序的工作方式。我的Yahtzee程序可以完全正常运行,但是我目前只是从一个随机整数文件中读取。
我已经使用提供给我们的“示例”驱动程序来设置大多数驱动程序。目标是将骰子返回给用户。我在算法上遇到麻烦-我正在使用以下函数作为辅助函数来返回单个字节:
unsigned char get_random_byte(int max) {
unsigned char c;
get_random_bytes(&c, 1);
return c%max;
}
我知道我应该先将这些位合并起来,然后再执行总计6的op运算并添加一个写入文件指针。用伪代码:
(TOTAL_OF_BITS % 6) + 1
但是,使用函数的参数,我不确定如何执行此操作。应该可以使用read命令:
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/