【发布时间】:2017-01-09 13:42:53
【问题描述】:
我有一个这样的结构:
typedef struct
{
char* BUFFER;
int Size;
}DataTransfer;
在我的 IOCTL 函数中,我尝试填充结构并传递给用户空间:
case CHAR_DRIVER_IOCQREAD:
printk(KERN_INFO "In CHAR_DRIVER_IOCQREAD");
dataTransfer.BUFFER = kmalloc(strlen_user("Hello") +1, GFP_KERNEL);
dataTransfer.Size = strlen_user("Hello") +1;
error_count = copy_to_user((DataTransfer*) arg, &dataTransfer, sizeof(dataTransfer) );
在用户空间中,我尝试这样接收结构:
DataTransfer dataTransfer;
if(ioctl(fd, CHAR_DRIVER_IOCQREAD, &dataTransfer) < 0)
{
perror("ERROR in ioctl CHAR_DRIVER_IOCQREAD");
}
else
{
printf("Kernel returned size %d \n", dataTransfer.Size);
printf("Kernel returned string %s \n", dataTransfer.BUFFER);
}
这样做的正确方法是什么?
【问题讨论】:
-
zOMG,你是从哪里得到这种风格的?!
-
@0andriy 我不明白吗?
-
@Robben_Ford_Fan_boy kernel.org/doc/Documentation/process/coding-style.rst
标签: c linux linux-kernel linux-device-driver