我需要将内核空间中的curr_task->pid
,pid_t
复制到用户空间中具有长空间的结构的字段。由于这是一个扩大转换,我不期待任何问题。强制转换和copy_to_user宏
但是,我得到一个恼人的编译器警告(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的'第二个参数的类型()'一'无效*'。 –
不是,答案让我意识到我做错了,虽然 - 当源位置中只有4个字节的数据时,我告诉'copy_to_user'复制8个字节。 – Adam
我想也许像我提到的一个快捷方式可能是什么原因你其他相关的问题:http://stackoverflow.com/questions/36658863/printing-pid-with-d-vs-ld-linux –