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.