J'ai remarqué que, sur les systèmes d'exploitation autres que Windows ... c.-à-d. Linux / mac, je peux faire des choses comme: - Envoyer un zip à un ami par dessus le but - Supprimer le fichier en cours de transfert
Et le transfert n'échoue pas.
Ou, je peux faire des opérations comme .. - commencer un film - effacer le fichier - le film joue toujours jusqu'à la fin (lu à partir du disque, pas seulement en mémoire tampon)
Bien que les fichiers soient "supprimés", comme je l'ai mentionné, ils sont en fait déplacés vers un emplacement différent du système de fichiers ... c'est-à-dire un répertoire Corbeille ou quelque chose du genre. Il me semble donc que le système d'exploitation utilise un pointeur @ le fichier qui est mis à jour lorsqu'il se déplace plutôt que d'accéder directement aux fichiers.
Quelqu'un peut-il nous éclairer sur la manière dont cette capacité IMPRESSIONNANTE est réellement mise en œuvre? Je ne sais même pas quoi chercher sur Google pour en savoir plus.
Je vous remercie.
la source
Réponses:
L'entrée de répertoire est juste un pointeur sur un inode. L'inode contient les méta-informations sur le fichier (autres que le nom) et des pointeurs sur les données du fichier (le cas échéant). Lorsque vous commencez à copier un fichier, vous obtenez un descripteur sur l’inode.
Le système d'exploitation conserve un nombre de références à l'inode. Tant qu'il y a des références à l'inode, l'inode et les données du fichier sont conservés. Une fois que toutes les références à l'inode sont supprimées, l'inode l'est et l'espace nécessaire au fichier est libéré.
Lorsque le fichier est ouvert pour la copie, il sera conservé jusqu'à ce que votre processus ferme le fichier. Cela devrait se produire une fois le transfert de fichier terminé et si le processus de copie échoue. Si le transfert de fichier échoue à mi-parcours et que vous avez supprimé tous les liens physiques vers le fichier, vous ne pourrez pas redémarrer le transfert.
EDIT: Comme d'autres l'ont noté, les déplacements de fichiers sur le même appareil sont effectués sans déplacer les données. À la place, une nouvelle entrée de répertoire est créée dans le répertoire de destination et l'entrée de répertoire d'origine est supprimée.
Il est possible d'avoir plusieurs entrées de répertoire pour le même fichier. Ceux-ci s'appellent des liens durs. Ils sont créés en créant une nouvelle entrée de répertoire pour le fichier sans supprimer l'entrée d'origine. L'inode du système de fichiers dispose d'un nombre de références pour enregistrer le nombre d'entrées de répertoire pointant vers le fichier.
EDIT2: Si le processus se bloque ou est tué, le fichier sera supprimé proprement car le nombre d'accès en mémoire sera réduit à zéro. C'est l'action qui se produit lorsque le programme se termine normalement.
En cas de panne de courant ou d’arrêt du système sans ordre, le disque nécessite un disque dur.
fsck
(vérification du système de fichiers) avant de pouvoir être entièrement monté. Selon l’état des structures d’inode et de répertoire sur le disque, l’espace sera récupéré, le fichier restera dans le répertoire ou une nouvelle entrée sera créée dans le répertoire.lost+found
annuaire. Les résultats dépendent des modifications qui ont été vidées sur le disque ou écrites dans le journal des systèmes de fichiers.la source
/tmp
, et immédiatementunlink(2)
il. À ce stade, il n'y a pas de fichier dans un répertoire (il n'y a donc rien à nettoyer à la fermeture ou au blocage), mais votre processus a toujours accès au fichier et aucun autre processus ne peut le gêner accidentellement ou délibérément. Cela illustre la propriété d'intérêt.Comme l'explique Matt Jenkins, le système d'exploitation (le système de fichiers) garde une trace des fichiers maintenus ouverts par les applications. Tant qu'un processus garde un fichier ouvert, ses données restent sur le disque (même s'il a été supprimé et qu'il n'est plus visible ou accessible à d'autres programmes.
Notez que la conséquence en est que l’espace occupé par un fichier ne peut être récupéré que lorsque le dernier processus l’utilisant l’a fermé. C’est une FAQ pour les opérations sur les systèmes de fichiers Linux / Unix: "La commande '' df '' indique que la partition est pleine, alors que 'du' indique l’espace disponible '" (voir par exemple, http://batleth.sapienti-sat.org/projects/FAQs/ext3-faq.html ). Si vous devez libérer de l'espace, il ne suffit pas de supprimer les gros fichiers (par exemple, les fichiers journaux), vous devez également vous assurer qu'aucun processus ne les garde ouverts (généralement un problème avec les fichiers journaux).
la source
C'est assez simple en fait. Le fichier conserve une liste de références - processus accédant au fichier. Lorsque vous supprimez le fichier, il supprime simplement la liste du répertoire, mais pas le fichier lui-même. Les programmes qui ont toujours le fichier ouvert peuvent toujours y accéder. Le fichier n'est réellement supprimé que lorsque tous les programmes qui y ont accès le ferment.
De plus, lors du déplacement du fichier - s'il se trouve dans le même système de fichiers - le fichier ne se déplace pas en tant que tel, il change simplement le pointeur sur le répertoire dans lequel se trouve le fichier
la source
Dans les systèmes de fichiers Unix, un fichier peut avoir un ou plusieurs liens durs à cela. Le fichier vit tant qu'il y en a au moins un. Lorsque le dernier est supprimé, l'espace du fichier est libéré. lien ci-dessus vous donnera un point de départ pour plus de lecture - voir en particulier la section "Compteur de liens"
la source