La función correspondiente a cerrar el fichero en el espacio de usuario (fclose), es el miembro release: de la estructura file operations en la llamada a register_chrdev. En este caso se trata de la función memoria_release. Tiene como argumentos la estructura inode y la estructura file anteriores.
Al liberar un fichero del espacio de usuario, se debe decrementar la cuenta de uso para restablecerla a su valor original. El módulo no se podrá descargar del kernel si dicha cuenta es distinta de cero.
Además de esta operación, cuando se cierra un fichero, se suele liberar memoria y variables relacionadas con la apertura del dispositivo. En este caso, a causa de su simplicidad, no se hacen este tipo de operaciones.
La función memoria_release aparece a continuación:
<<memoria release>>= int memoria_release(struct inode *inode, struct file *filp) { /* Decrementamos la cuenta de uso */ MOD_DEC_USE_COUNT; /* Exito */ return 0; } |
En la Tabla 6 se puede ver esta nueva función.
Eventos | Funciones de usuarios | Funciones del kernel |
Carga de módulo | insmod | init_module |
Abrir dispositivo | fopen | file operations: open |
Leer dispositivo | ||
Escribir dispositivo | ||
Cerrar dispositivo | fclose | file operations: release |
Quitar módulo | rmmod | cleanup_module |
Tabla 6. Eventos de los drivers y sus funciones asociadas de intercambio entre el espacio de kernel y el espacio de usuario.