Как использовать 'copy_to_user' с индексом для копирования по кускам? - PullRequest
0 голосов
/ 21 января 2020

У меня большие данные в ядре (1 ГБ +), я хочу скопировать их пользователю по частям.

int i=0;
while (myBuffer) {
  copy_to_user(userBuffer + 64*i, (void *) myBuffer, 64)
  myBuffer = newData();
  i++;
}

как я могу сделать (+ 64 * i) в режиме ядра. Это законно? Я имею в виду, что когда я посылаю бафф от пользователя к ядру, ядро ​​хочет заполнить его данными, используя 'copy_to_user', но ядро ​​будет использовать 'copy_to_user' несколько раз для одного и того же userBuff, каждый раз в другое место. пример: обратный вызов:

getMyData(char* userBuff){
  copy_to_user(userBuff, 'H', 1);
  copy_to_user(userBuff+1, 'o', 1);
  copy_to_user(userBuff+2, 'w', 1);
  copy_to_user(userBuff+3, ' ', 1);
  copy_to_user(userBuff+4, 'a', 1);
  copy_to_user(userBuff+5, 'r', 1);
  copy_to_user(userBuff+6, 'e', 1);
}

пользовательские вызовы:

getMydata(myBuff);
print("%s",myBuff);

пользователь ожидает печати: Как это возможно

? это не та же самая память ...

...