El driver “memoria”: cerrando el dispositivo como fichero

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.