将内核数据写到用户空间缓冲区的一般操作

内核空间中,不能像写应用程序一样直接把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();它们的核心操作都是用汇编实现的代码 ,效率高。

Advertisements
将内核数据写到用户空间缓冲区的一般操作

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s