Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 从用户指针复制数据_C_Linux_Pointers - Fatal编程技术网

C 从用户指针复制数据

C 从用户指针复制数据,c,linux,pointers,C,Linux,Pointers,我必须从基于Linux的嵌入式主板上的struct iw_point变量中的指针访问数据。结构中包含的指针属于\u user类型。但当我试图访问那个位置时,程序一直在出错 当我查看该指针指向的内存位置时,我注意到该位置不在必须从该位置读取的进程的地址空间中(通过读取/proc/pid/maps获得): 指针返回的位置为E80000,不在上面返回的范围内 这是否意味着该位置位于首先触发指针返回的程序的地址空间之外(指针是通过ioctl调用返回的)?SIOCGIWSCAN ioctl将您提交的空间用

我必须从基于Linux的嵌入式主板上的
struct iw_point
变量中的指针访问数据。
结构中包含的指针属于
\u user
类型。但当我试图访问那个位置时,程序一直在出错

当我查看该指针指向的内存位置时,我注意到该位置不在必须从该位置读取的进程的地址空间中(通过读取
/proc/pid/maps
获得):

指针返回的位置为E80000,不在上面返回的范围内


这是否意味着该位置位于首先触发指针返回的程序的地址空间之外(指针是通过ioctl调用返回的)?

SIOCGIWSCAN ioctl将您提交的空间用作

iwr.u.data.pointer = p;
iwr.u.data.length = BUFSZ;
请求返回扫描的网络信息,因为ioctl无法在用户空间中分配返回区域。检查是否已正确初始化此指针和数据长度(建议使用4k缓冲区空间)。如果您没有,您可能会得到这些未定义的结果

还要确保始终检查
ioctl
中的返回值-在出现错误的情况下,不要尝试访问返回区域

如果你做了所有这些,但它仍然没有返回一个有效的指针:仍然有许多驱动程序不正确地支持无线扩展


另外,一点代码会使答案更简单-正如您所说的,如果不反复拨弄和猜测,很难回答问题。

指针是否已初始化为指向有效内存位置?不要在您自己的变量中使用
\uu
(两个下划线)!它们是为编译器和操作系统保留的。您是否分配了必要的缓冲区并将其分配给了
指针?@PaulOgilvie:似乎是一个Linux内核提示(Linux实际上喜欢
\uuuu
)。@nbro我无法控制这一点。如上所述,我对SIOCGIWSCAN进行ioctl调用,该调用返回指针。然而,如果我基于我所看到的标准linux工具的源代码,那么我就不必初始化指针。例如:第589行,这是一个带有一些胡乱猜测的评论,而不是一个答案。@Olaf是使用OP提供的有限信息可以给出的最佳答案。从
ioctl
返回的无效指针很可能是由提交的无效指针引起的。没有更多可能的原因可以导致这种情况。这就是为什么在OP澄清之前不应该回答这个问题。请帮助调节此网站。这些问题/答案对任何人都没有帮助,对未来的读者肯定没有帮助。
iwr.u.data.pointer = p;
iwr.u.data.length = BUFSZ;