Une des choses qui me laisse perplexe depuis que je commence à utiliser Linux est le fait qu’elle vous permet de changer le nom d’un fichier, voire de le supprimer en cours de lecture. Un exemple est la façon dont j'ai accidentellement essayé de supprimer une vidéo en cours de lecture. J'ai réussi et j'ai été surpris d'apprendre que vous pouvez modifier à peu près n'importe quoi dans un fichier sans vous soucier de son utilisation actuelle ou non.
operating-systems
file-management
the_midget_17
la source
la source
/proc
système de fichiers via le programme qui l'a ouvert.) Un fichier ne peut être vraiment supprimé que s'il ne contient plus de références, et cela se fait automatiquement.Réponses:
Chaque fois que vous ouvrez ou exécutez un fichier dans Windows, Windows verrouille le fichier (il s'agit d'une simplification, mais généralement de la valeur true.) Un fichier verrouillé par un processus ne peut pas être supprimé tant que ce processus ne l'a pas libéré. C’est pourquoi chaque fois que Windows doit se mettre à jour, vous devez redémarrer pour que celle-ci prenne effet.
D'autre part, les systèmes d'exploitation de type Unix tels que Linux et Mac OS X ne verrouillent pas le fichier, mais plutôt les secteurs de disque sous-jacents. Cela peut sembler une différenciation triviale, mais cela signifie que l'enregistrement du fichier dans la table des matières du système de fichiers peut être supprimé sans perturber tout programme ayant déjà ouvert le fichier. Vous pouvez donc supprimer un fichier en cours d’exécution ou en cours d’exécution et continuer à exister sur le disque aussi longtemps que le processus aura un descripteur ouvert, même si son entrée dans la table des fichiers a disparu.
la source
Windows utilise par défaut le verrouillage de fichier automatique et obligatoire. UNIXes est paramétré par défaut sur un verrouillage manuel coopératif des fichiers. Dans les deux cas, les valeurs par défaut peuvent être remplacées, mais dans les deux cas, elles ne le sont généralement pas.
Beaucoup de vieux codes Windows utilisent l'API C / C ++ (fonctions comme
fopen
) plutôt que l'API native (fonctions commeCreateFile
). L'API C / C ++ ne vous permet pas d'indiquer comment le verrouillage obligatoire fonctionnera. Vous obtenez donc les valeurs par défaut. Le "mode de partage" par défaut tend à interdire les opérations "conflictuelles". Si vous ouvrez un fichier en écriture, les écritures sont supposées entrer en conflit, même si vous n'écrivez jamais dans le fichier. Idem pour renommer.Et voici où ça empire. À l'exception de l'ouverture en lecture ou en écriture, l'API C / C ++ ne fournit aucun moyen de spécifier ce que vous avez l'intention de faire avec le fichier. L’API doit donc supposer que vous allez effectuer toute opération légale. Étant donné que le verrouillage est obligatoire, une
open
autorisation autorisant une opération en conflit sera refusée, même si le code n'a jamais eu l'intention d'exécuter l'opération en conflit, mais consistait simplement à ouvrir le fichier à une autre fin.Ainsi, si le code utilise l'API C / C ++, ou utilise l'API native sans réfléchir spécifiquement à ces problèmes, ils empêcheront le plus grand nombre possible d'opérations possibles pour chaque fichier ouvert et ne pourront pas l'ouvrir, à moins que toutes les opérations possibles ne soient effectuées. pourrait jouer dessus une fois ouvert est sans conflit.
À mon avis, la méthode Windows fonctionnerait beaucoup mieux que la méthode UNIX si chaque programme choisissait ses modes de partage et ses modes ouverts de manière judicieuse et en toute sécurité. La méthode UNIX, cependant, fonctionne mieux si le code ne se donne pas la peine de réfléchir à ces problèmes. Malheureusement, l'API C / C ++ de base ne correspond pas bien à l'API de fichier Windows d'une manière qui gère les modes de partage et les conflits s'ouvrent bien. Donc, le résultat net est un peu brouillon.
la source
C'est une question très intéressante qui m'a fait penser à une réponse viable. J'espère que d'autres pourront fournir une sauvegarde ici.
J'utilise Windows et Linux et l'ai aussi remarqué. Je suis aussi un utilisateur de vim. Vim lira un fichier texte dans une "mémoire tampon" ou dans la RAM, puis ne touchera pas le fichier avant l'enregistrement. Linux pourrait effectuer ce genre d’action en général avec tous les fichiers.
Prenez votre vidéo par exemple, elle la lit, si possible dans sa totalité, dans la RAM, puis vous avez une copie de la vidéo qui est facilement accessible, consultable et accessible. Si le fichier est trop volumineux, vous pouvez rencontrer des problèmes car Linux peut ne pas lire la vidéo en entier, peut-être simplement un gros morceau. Lorsque votre lecteur arrive à la fin de la vidéo en mémoire tampon, il essaiera de relire le fichier. Si vous avez supprimé la vidéo, ça craint pour vous.
Windows est un système d'exploitation beaucoup plus sûr dans certains cas, car il vous empêche de le faire. Cela peut mettre les fichiers en mémoire tampon de la même manière que Linux, mais ajoute également le verrouillage de fichier pour vous empêcher, ou d'autres programmes, de modifier les fichiers sur lesquels vous travaillez ou que vous visualisez. Cela aide à garder le fichier intact et vous empêche, à vous ou à d’autres programmes, d’écraser les modifications apportées.
la source