星期一, 十一月 06, 2006

和内核一起做些事情:/proc

首先,我尝试搬抄一下使用/proc文件访问内核的方式。这个方式在以前的书本上写要注册一个proc_dir_entry结构体的内容,然后注册等。但是现在这些情况有所变化。如果只是向用户输出(也就是用户只读),那么只需要写一个读取的方法就好了,注册的方法很简单。

下面用代码说明:
static int procfile_read(char *buffer,
char **buffer_location,// Buffer
off_t offset, // current offset to read
int buffer_length,
int *eof,
int *data)
{
static char mybuffer[128];
static int readcount = 0;
int len;

if(offset > 0){
return 0;
}

readcount ++;
len = sprintf(mybuffer, "This is %d time to read me.\n", readcount);
*eof = 1;
return len;
}
代码主要来自这个实例,虽然是2.4内核的,可是效果在999之内还是不错的。
需要注意的是读取函数的参数发生了变化。不过,我的编译器还是一再提醒我注册时指针参数不匹配的问题,不知道指的是哪一个参数?

注册:
create_proc_read_entry("hello", 0, NULL, procfile_read, NULL);
注销:
remove_proc_entry("hello", NULL);
这里为了简单都采用了默认的参数,直接放到了/proc/hello这个位置上。

采用文件名来操作的确比使用inode方便的多了。

1 条评论:

匿名 说...

hi