阅读:1518回复:8
内核模块如何与用户空间的进程通讯阿
譬如说一个应用:我有一个内核模块,还有一个用户空间得进程。 用户空间的进程监视网络情况,接受信息。然后它要通知内核模块到指定内存空间或者直接从文件上读取数据。请问如何实现阿。
|
|
沙发#
发布于:2002-12-09 19:05
上面的代码经过测试,肯定没问题。至于你所的内核的read就是write ,我不太清楚。 你的程序没有错误 就是往文件写 只是这个操作对于内核来说确实读取 其实没有什么的 表述不同而已 |
|
板凳#
发布于:2002-12-09 17:04
上面的代码经过测试,肯定没问题。至于你所的内核的read就是write ,我不太清楚。
|
|
地板#
发布于:2002-12-05 11:40
在内核空间中不能调用fread、fwrite直接读写文件,用下列函数 可在内核空间中写文件,将write改成read就可读文件 #define _write(f, buf, sz) (f->f_op->write(f, buf, sz, &f->f_pos)) #define WRITABLE(f) (f->f_op && f->f_op->write) #define BEGIN_KMEM { mm_segment_t old_fs = get_fs(); set_fs(get_ds()); #define END_KMEM set_fs(old_fs); } int write_to_file(char *logfile, char *buf, int size) { int ret = 0; struct file *f = NULL; lock_kernel(); BEGIN_KMEM; f = filp_open(logfile, O_CREAT|O_APPEND, 00600); if (IS_ERR(f)) { ret = -1; } else { if (WRITABLE(f)) _write(f, buf, size); else ret = -1; ret = filp_close(f,NULL); } END_KMEM; unlock_kernel(); return ret; } 我怎么记得内核中刚好相反 内核READ其实是WRITE的 |
|
地下室#
发布于:2002-12-05 11:01
非常感谢各位同志的帮助 :) 让偶有了眉目 这段时间有些懒 具体程序还没有编 ;P 不过后来几位同志真是不好意思 偶刚开始给分给完了 后面的偶想给 确不知道如何给了 见谅见谅
|
|
5楼#
发布于:2002-12-05 08:53
使用void memcpy_fromfs(void to*,const void *from,unsigned long count)和void memcpy_tofs(void *to,const void* from,unsigned long count)就可实现内核和用户空间之间的数据读写
|
|
6楼#
发布于:2002-12-04 17:29
譬如说一个应用:我有一个内核模块,还有一个用户空间得进程。 用户空间的进程监视网络情况,接受信息。然后它要通知内核模块到指定内存空间或者直接从文件上读取数据。请问如何实现阿。 在内核空间中不能调用fread、fwrite直接读写文件,用下列函数 可在内核空间中写文件,将write改成read就可读文件 #define _write(f, buf, sz) (f->f_op->write(f, buf, sz, &f->f_pos)) #define WRITABLE(f) (f->f_op && f->f_op->write) #define BEGIN_KMEM { mm_segment_t old_fs = get_fs(); set_fs(get_ds()); #define END_KMEM set_fs(old_fs); } int write_to_file(char *logfile, char *buf, int size) { int ret = 0; struct file *f = NULL; lock_kernel(); BEGIN_KMEM; f = filp_open(logfile, O_CREAT|O_APPEND, 00600); if (IS_ERR(f)) { ret = -1; } else { if (WRITABLE(f)) _write(f, buf, size); else ret = -1; ret = filp_close(f,NULL); } END_KMEM; unlock_kernel(); return ret; } [编辑 - 12/4/02 by houyb] [编辑 - 12/4/02 by houyb] |
|
7楼#
发布于:2002-11-29 16:27
ioctl是一个good idea.
|
|
8楼#
发布于:2002-11-29 16:15
譬如说一个应用:我有一个内核模块,还有一个用户空间得进程。 用户空间的进程监视网络情况,接受信息。然后它要通知内核模块到指定内存空间或者直接从文件上读取数据。请问如何实现阿。 Some way to resolve your problem: 1. using socket as data channle, kernel mod is server. 2. app using ioctl to info kernel mod to do so. 3. kernel mod using proc filesystem to fetch data. |
|
|