1.用户空间和内核空间数据传输思想
内核空间不能够直接通过指针在操作用户空间的内存,如果内核正在通过指针操作内存,此时进程结束,内核就会崩溃。正确的做法是在内核空间开辟自己可以操作的内存,将用户空间的数据拷贝到内核空间之后,内核操作自己的这块内存即可,即使进程意外结束,内核也不会崩溃,这种做法的安全性是要比前者的高的。
2.用户空间和内核空间数据传输的API
#include <linux/uaccess.h> int copy_from_user(void *to, const void __user volatile *from,unsigned long n) 功能:将数据从用户空间拷贝到内核空间 (write) 参数: @to:内核空间的首地址 @from:用户空间的首地址 @n:大小(单位是字节) 返回值:成功返回0,失败返回未拷贝字节的个数 int copy_to_user(void __user volatile *to, const void *from, unsigned long n) 功能:将数据从内核空间拷贝到用户空间 (read) 参数: @to:用户空间的首地址 @from:内核空间的首地址 @n:大小(单位是字节) 返回值:成功返回0,失败返回未拷贝字节的个数
3.用户和内核空间数据传输实例
mycdev.c
#include <linux/fs.h> #inc