GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué la función de cierre se llama release en `struct file_operations` en el kernel de Linux?

Debido a que el archivo se puede abrir varias veces, cuando cierra un descriptor, solo en la última llamada de cierre para la última referencia al archivo se invoca la liberación. Así que hay una diferencia entre cerrar y liberar.

release:llamado en el último cierre (2) de este archivo, es decir, cuando el archivo->f_count llega a 0. Aunque se define como un int de retorno, VFS ignora el valor de retorno (ver fs/file_table.c:__fput()). más


Tuve una confusión similar. Perreal tiene razón en que no se llama release cuando se llama close. Aquí hay un extracto del libro Linux Device Drivers 3rd edition:

int (*flush) (struct file *);

La operación de vaciado se invoca cuando un proceso cierra su copia de un descriptor de archivo para un dispositivo; debe ejecutar (y esperar) cualquier operación pendiente en el dispositivo. Esto no debe confundirse con la operación fsync solicitada por los programas de usuario. Actualmente, el vaciado se usa solo en el código del sistema de archivos de red (NFS). Si flush es NULL, simplemente no se invoca.

int (*release) (struct inode *, struct file *);

Esta operación se invoca cuando se libera la estructura del archivo. Como abierto, puede faltar liberación.

Tenga en cuenta que la liberación no se invoca cada vez que se cierra un proceso. Cada vez que se comparte una estructura de archivos (por ejemplo, después de una bifurcación o un dup), no se invocará la liberación hasta que se cierren todas las copias. Si necesita vaciar los datos pendientes cuando se cierra una copia, debe implementar el método de vaciado.


Linux
  1. Por qué 'sshpass' no es la forma correcta de automatizar las transferencias de archivos en Linux

  2. Cambie la versión del kernel en un servidor en la nube de Linux usando el modo de rescate

  3. ¿Dónde está la función itoa en Linux?

  4. ¿Dónde está el archivo de encabezado <conio.h> en Linux? ¿Por qué no puedo encontrar <conio.h>?

  5. ¿Por qué proteger el kernel de Linux del usuario root?

Copiar archivos en la terminal de Linux

Cambiar el nombre de un archivo en la terminal de Linux

Mover archivos en la terminal de Linux

Introducción al sistema de archivos de Linux

¿Por qué el usuario más poderoso en un sistema Unix/Linux se llama “root”?

¿Por qué se implementa el servidor NFS de Linux en el kernel en lugar del espacio de usuario?