У меня есть-структуру, как так:Linux Device Driver: Копирование строки из ядра в UserSpace
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));
В userpace Я пытаюсь получить структуру следующим образом:
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- to-user-space) – levengli
zOMG, откуда у вас этот стиль? – 0andriy
@ 0andriy Я тебя не понимаю? –