Мне нужно скопировать curr_task->pid
, a pid_t
в пространство ядра, в поле структуры в пространстве пользователя, которое имеет место в течение длительного времени. Поскольку это расширяющееся преобразование, я не ожидаю никаких проблем.casting и copy_to_user macro
Однако я получаю раздражает предупреждение компилятора (copy_long_to_user
для всех намерений и целей такой же, как copy_to_user
):
cs300/process_ancestors.c:31:3: warning: passing argument 2 of ‘copy_long_to_user’ from incompatible pointer type [enabled by default]
if(copy_long_to_user(&info_array[num_filled_kernel].pid, &curr_task->pid)) {
^
cs300/process_ancestors.c:9:5: note: expected ‘long int *’ but argument is of type ‘pid_t *’
Является ли это предупреждение, что я могу смело игнорировать (компилятор будет делать бросок для меня)? Если мне нужно наложить curr_task->pid
на длительное время, как я могу это сделать в контексте использования copy_to_user
? Я предполагаю, что это что-то вроде: (copy_long_to_user(&info_array[num_filled_kernel].pid, &((long)curr_task->pid)))
Я надеюсь, что вы не просто принять участие @ ответ ChunleiMa и сделать тип второго параметра 'copy_long_to_user()' '' недействительным *. –
Нет, ответ заставило меня понять, что я делаю неправильно, хотя я говорил «copy_to_user» копировать 8 байтов, когда в исходном местоположении было всего 4 байта данных. – Adam
Я думал, что, возможно, ярлык, как я упоминал, может быть причиной того, что вы другой, связанный с ним вопрос: http://stackoverflow.com/questions/36658863/printing-pid-with-d-vs-ld-linux –