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

参数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);

会让你的心态更平和更坦然,也会让你心无旁骛,更会让你的心灵得到解脱和抚慰。

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

相关文章:

你感兴趣的文章:

标签云: