gpt4 book ai didi

转换和 copy_to_user 宏

转载 作者:太空宇宙 更新时间:2023-11-04 05:35:53 25 4
gpt4 key购买 nike

我需要将内核空间中的curr_task->pid,一个pid_t,复制到用户空间中一个结构体的域中,该结构体的域有很长的空间。由于这是一个不断扩大的转换,我预计不会出现任何问题。

但是,我收到了一个烦人的编译器警告(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 显式转换为 long,我该如何在使用 copy_to_user 的上下文中执行此操作?我的猜测是它类似于:(copy_long_to_user(&info_array[num_filled_kernel].pid, &((long)curr_task->pid)))

最佳答案

您需要一个辅助变量才能正确执行此操作。

long curr_pid = curr_task->pid;
copy_long_to_user(&info_array[num_filled_kernel].pid, &curr_pid);

获取辅助变量的地址是合法的,临时地址(由强制转换生成)则不合法。

关于转换和 copy_to_user 宏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36658773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com