| Linux Kernel Procfs Guide | ||
|---|---|---|
| <<< Previous | Communicating with userland | Next >>> |
When a large number of almost identical files is used, it's
quite inconvenient to use a separate call back function for
each file. A better approach is to have a single call back
function that distinguishes between the files by using the
data field in struct
proc_dir_entry. First of all, the
data field has to be initialised:
struct proc_dir_entry* entry;
struct my_file_data *file_data;
file_data = kmalloc(sizeof(struct my_file_data), GFP_KERNEL);
entry->data = file_data;
|
The data field is a void
*, so it can be initialised with anything.
Now that the data field is set, the
read_proc and
write_proc can use it to distinguish
between files because they get it passed into their
data parameter:
int foo_read_func(char *page, char **start, off_t off,
int count, int *eof, void *data)
{
int len;
if(data == file_data) {
/* special case for this file */
} else {
/* normal processing */
}
return len;
}
|
Be sure to free the data data field
when removing the procfs entry.
| <<< Previous | Home | Next >>> |
| Writing data | Up | Tips and tricks |