3.3. Una simple retrollamada para varios archivos

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.