现在的位置: 首页 > 综合 > 正文

# define __user __attribute__((noderef, address_space(1)))

2013年12月01日 ⁄ 综合 ⁄ 共 635字 ⁄ 字号 评论关闭

参数
to
的时候有个
__user
限定,这个在
~/include/linux/compiler.h
中有如下定义:

# define __user
   
__attribute__((noderef, address_space(1)))

表示这是一个用户空间的地址,即其指向的为用户空间的内存

大家可能对这个
__attribute__
感到比较迷惑,不过没关系,
google
一下嘛

__attribute__

gnu c
编译器的一个功能,它用来让开发者使用此功能给所声明的函数或者变量附加一个属性,以方便编译器进行错误检查,其实就是一个内核检查器。

具体可以参考如下:

http://unixwiz.net/techtips/gnu-c-attributes.html

 

 

 

__user

宏简单告诉编译器(通过 noderef
)不应该解除这个指针的引用(因为在当前地址空间中它是没有意义的)。 不明白什么意义? 有些网友说是为用户空间的, 我自己用了, 用的不是用户空间一样没什么问题.

 

 

直接拷贝不了,因为一个是在用户空间,一个是在内核空间

如果要拷贝的话,可使用 copy_from_user

假如用户空间写为:

int i = 0;

ioctl(fd, XXXXX, i);

内核空间需要写为

get_user(xxx, (int __user *)arg);

假如用户空间写为:

int i = 0;

ioctl(fd, XXXXX, &i);

则内核空间需要写为:

copy_from_user(xxx, (void __user *)arg, size);

抱歉!评论已关闭.