我有一個結構像這樣:Linux設備驅動程序:從內核複製字符串到用戶空間
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);
}
這樣做的正確方法是什麼?
[從內核空間到用戶空間複製數據(的可能的複製http://stackoverflow.com/questions/34159622/copy-data-from-kernel-space-用戶空間) – levengli
zOMG,你從哪裏得到這種風格?! – 0andriy
@ 0andriy我不明白你的意思嗎? –