Gu�a del Procfs del N�cleo Linux | ||
---|---|---|
Anterior | Cap�tulo 3. Comunicaci�n con los Procesos de Usuario | Siguiente |
Cuando es usado un gran n�mero de archivos casi id�nticos, es bastante conveniente usar una funci�n de retrollamada separada para cada archivo. Una mejor aproximaci�n es tener una funci�n simple de retrollamada que distinga entre los archivos usando el campo data en struct proc_dir_entry. Lo primero de todo, el campo data tiene que estar inicializado:
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; |
El campo data es un void *, por lo tanto puede ser inicializado con cualquier cosa.
Ahora que el campo data est� establecido, read_proc y write_proc pueden utilizarlo para distinguir entre archivos, porque ellos son pasados en sus par�metros data:
int foo_read_func(char *page, char **start, off_t off, int count, int *eof, void *data) { int len; if(data == file_data) { /* caso especial para este archivo */ } else { /* procesamiento normal */ } return len; } |
Aseg�rate de liberar el campo de datos data cuando quites la entrada procfs.