我正确实现了copy_from_user吗?

时间:2020-04-12 16:45:49

标签: c module kernel device-driver

我正在为我的模块实现写文件操作,并且我想知道我是否正确地实现了copy_from_user函数。该模块是一个tictactoe游戏,因此我接受了用户的输入。输入将是形式为“ 01 X”或“ 21 O”的字符串,其中数字代表列和行,字母代表它们的段。我的写函数如下:

ssize_t tictactoe_write(struct file *pfile, char __user *buffer, size_t length, loff_t *offset){

   char* data = kmalloc(sizeof(buffer), GFP_KERNEL);
   size_t unread = copy_from_user(data, buffer, sizeof(buffer));

   printk(KERN_NOTICE "Written");

   //Return number of bytes not read
   return unread;
}

通过此实现,是否可以使用用户输入来初始化数据指针?然后,我可以在模块的其余部分中进行哪些操作?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

阐明@Tarracon的含义:

ssize_t tictactoe_write(struct file *pfile, char __user *buffer, size_t length, loff_t *offset){

   char* data = kmalloc(length, GFP_KERNEL);
   size_t unread = copy_from_user(data, buffer, length);

   printk(KERN_NOTICE "Written");

   //Return number of bytes not read
   return unread;
}

此外,您不是实施 copy_from_user,而是调用。很大的不同。