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

时间:2013-11-24 19:11:13

标签: c linux random linux-device-driver

我在系统类的介绍中正在做一个涉及Yahtzee的项目,我不太明白设备驱动程序是如何工作的。我的Yahtzee程序完全正常运行,但我刚从一个随机的文件中读入。

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

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

我知道我应该在执行mod 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命令read(dice [i],sizeof(int),1,fp)进行比较,发现我应该将结果分配给文件,但除此之外我不知道如何继续。这将取决于buf变量以及大小对吗?

部分问题是我对设备驱动程序的了解非常不稳定。有人可以帮帮我吗?我很感激时间和精力。

1 个答案:

答案 0 :(得分:0)

这是我使用的读取方法:

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;
}