内核空间中,不能像写应用程序一样直接把buffer(这是内核的内存)里直接将数据写到另一个缓冲区(用户空间的)里面,或直接从用户空间的缓冲区里读数据。
Linux 里使用FS 寄存器来保存kernel space 和 user space 的切换的状态。所以,如果你想手动的话,可以这样做:
mm_segment_t fs; fs = get_fs(); set_fs(get_ds()); write_data_to_buf(buf); set_fs(fs);
也就是先切换到用户空间, 把数据写道buf缓冲区里面,最后再切换回来。
内核的API提供了几个函数来完成切换,就是copy_to_user(), copy_from_user();它们的核心操作都是用汇编实现的代码 ,效率高。