GNU/Linux >> Linux Esercitazione >  >> Linux

Perché la funzione di chiusura si chiama release in `struct file_operations` nel kernel di Linux?

Poiché il file può essere aperto più volte, quando si chiude un descrittore, solo l'ultima chiamata di chiusura per l'ultimo riferimento al file richiama il rilascio. Quindi c'è una differenza tra chiusura e rilascio.

release:chiamato all'ultima chiusura(2) di questo file, cioè quandofile->f_count raggiunge 0. Anche se definito come ritorno int, il returnvalue è ignorato da VFS (vedi fs/file_table.c:__fput()). altro


Ho avuto una confusione simile. Perreal ha ragione nel dire che il rilascio non viene chiamato quando viene chiamato close. Ecco un estratto dal libro Linux Device Drivers 3rd edition:

int (*flush) (struct file *);

L'operazione flush viene invocata quando un processo chiude la sua copia di un descrittore di file per un dispositivo; dovrebbe eseguire (e attendere) qualsiasi operazione in sospeso sul dispositivo. Questo non deve essere confuso con l'operazione fsync richiesta dai programmi utente. Attualmente, flush viene utilizzato solo nel codice NFS (network file system). Se flush è NULL, semplicemente non viene invocato.

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

Questa operazione viene richiamata quando la struttura del file viene rilasciata. Come aperto, il rilascio può mancare.

Si noti che release non viene richiamato ogni volta che un processo chiama close. Ogni volta che viene condivisa una struttura di file (ad esempio, dopo un fork o un dup), il rilascio non verrà invocato fino a quando tutte le copie non saranno chiuse. Se hai bisogno di cancellare i dati in sospeso quando una qualsiasi copia viene chiusa, dovresti implementare il metodo flush.


Linux
  1. Buon compleanno al kernel Linux:qual è la tua versione preferita?

  2. Il ciclo di vita dei test del kernel Linux

  3. Perché "sshpass" non è il modo giusto per automatizzare i trasferimenti di file in Linux

  4. Linux:perché non è presente alcun file system Rootfs sul sistema?

  5. Linux:perché il kernel non può eseguire Init?

Introduzione al file system Linux

Linux:perché l'interfaccia Ethernet si chiama Enp0s10 anziché Eth0?

Linux:l'intestazione Vmlinux contiene la lunghezza dell'immagine del kernel?

Dov'è la funzione itoa in Linux?

Perché l'utente più potente su un sistema Unix/Linux si chiama "root?"

Perché il server Linux NFS è implementato nel kernel anziché nello spazio utente?