GNU/Linux >> Tutoriels Linux >  >> Linux

Pourquoi la fonction close est-elle appelée release dans `struct file_operations` dans le noyau Linux ?

Étant donné que le fichier peut être ouvert plusieurs fois, lorsque vous fermez un descripteur, seul le dernier appel de fermeture pour la dernière référence au fichier appelle release. Il y a donc une différence entre fermer et libérer.

release :appelée lors du dernier close(2) de ce fichier, c'est-à-dire lorsque file->f_count atteint 0. Bien que définie comme renvoyant int, la valeur de retour est ignorée par VFS (voir fs/file_table.c:__fput()). plus


J'ai eu une confusion similaire. Perreal a raison de dire que la version n'est pas appelée lorsque close est appelée. Voici un extrait du livre Linux Device Drivers 3rd edition :

int (*flush) (struct file *);

L'opération de vidage est invoquée lorsqu'un processus ferme sa copie d'un descripteur de fichier pour un périphérique ; il doit exécuter (et attendre) toutes les opérations en cours sur le périphérique. Cela ne doit pas être confondu avec l'opération fsync demandée par les programmes utilisateur. Actuellement, flush est utilisé uniquement dans le code du système de fichiers réseau (NFS). Si flush est NULL, il n'est tout simplement pas appelé.

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

Cette opération est invoquée lors de la publication de la structure du fichier. Comme ouvert, la version peut être manquante.

Notez que release n'est pas appelé à chaque fois qu'un processus appelle close. Chaque fois qu'une structure de fichier est partagée (par exemple, après un fork ou un dup), la libération ne sera pas invoquée tant que toutes les copies ne seront pas fermées. Si vous devez vider les données en attente lorsqu'une copie est fermée, vous devez implémenter la méthode flush.


Linux
  1. Linux - Pourquoi l'interface Ethernet s'appelle-t-elle Enp0s10 au lieu d'Eth0 ?

  2. Linux - L'en-tête Vmlinux contient-il la longueur de l'image du noyau ?

  3. Linux - Pourquoi le noyau ne peut-il pas exécuter Init ?

  4. Modifier la version du noyau sur un serveur cloud Linux en utilisant le mode de secours

  5. Où est la fonction itoa sous Linux ?

Joyeux anniversaire au noyau Linux :Quelle est votre version préférée ?

Le cycle de vie des tests du noyau Linux

Introduction au système de fichiers Linux

Pourquoi 'sshpass' n'est pas le bon moyen d'automatiser les transferts de fichiers sous Linux

Linux - Pourquoi n'y a-t-il pas de système de fichiers Rootfs présent sur le système ?

Pourquoi protéger le noyau Linux de l'utilisateur root ?