Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 01/06/2006, à 00:02

mathesis

[Déplacer un fichier utilisé] comment linux y arrive ?

Lorsque je lis un fichier musical par exemple, si l'envie me prend de renommer ou de déplacer le fichier, linux me le permet ce qui n'est pas le cas chez microsoft par exemple.

Question simple : comment ça marche, pourquoi ça ne marche pas sous windows ?

Hors ligne

#2 Le 01/06/2006, à 00:14

Lord Alembert

Re : [Déplacer un fichier utilisé] comment linux y arrive ?

Le système de fichier de Linux est basé sur des noeuds. Un noeud, grossièrement, représente un fichier. Un noeud contient des informations telles que l'emplacement du fichier, le noeud père du noeud (autrement dit, le répertoire dans lequel se trouve le fichier), le noeud lui-même, les noeuds fils si le fichier est un répertoire (car en UNIX et Linux, les répertoires sont des fichiers).

Quand on utilise un fichier, le programme obtient en réalité le noeud qui correspond au fichier. Si en cours de route le fichier change de nom, ca n'empêche pas que le reste des informations est inchangé. Déplacer un fichier, comme le renommer, n'est donc que le changement d'une information du noeud, ce qui ne compromet pas les autres informations du noeud.

Sous Windows, il n'y a pas un tel système de noeuds mais je n'en sais pas beaucoup plus. Je crois que les programmes qui traitent les données utilisent-ils directement une plage de mémoire et que si on voulait changer l'emplacement du fichier, on doit déplacer physiquement la plage de mémoire. Un programme qui lit les données se retrouverait alors à lire des données qui, à priori, n'ont plus rien à voir avec ce qu'il croit.

Mais c'est à confirmer.

Hors ligne

#3 Le 01/06/2006, à 00:25

abetsic

Re : [Déplacer un fichier utilisé] comment linux y arrive ?

Sous Linux (et Unix aussi il me semble) lorsque tu fais une opération sur un fichier telle qu'un déplacement ou un renommage, voire une suppression, celle ci n'est effectuée que lorsque le fichier en question n'est plus ouvert par aucun processus.

Schématiquement voilà ce qui se passe sur ton système :
Tu es en train d'écouter le dernier tube de Lorie avec une application multimedia quelconque. L'application a donc ouvert le fichier audio qui est sur ton disque. Le système garde en mémoire quelque part (ne me demande pas où) qu'il a ouvert le fichier.
Tu veux alors faire une modification sur ce fichier, le supprimer par exemple : le fichier  va donc disparaître de ton arborescence, mais tu pourras continuer à écouter ton tube préféré parce que le système sait que le fichier est encore ouvert par un processus, et il n'a donc pas supprimé les données nécessaires pour le lire. Une fois que la chanson est finie, le fichier est fermé par ton lecteur multimedia et là tu ne peux plus l'écouter.

Dans le cas d'un déplacement ou d'un renommage, c'est un peu différent, chaque fichier est décrit par ce qu'on appelle un numéro d'inode qui est différent pour chaque fichier. Quand on déplace (ou renomme, c'est la même chose) le numéro d'inode est conservé. Pour l'application c'est comme si il ne s'était (presque) rien passé puisque le n° d'inode n'a pas changé.

Voilà, je ne crois pas avoir dit d'erreurs, mais il me semble que ça fonctionne comme ça.

Quand à windows, je pense que c'est une question de choix des développeurs dans la manière de gérer les fichiers, en gros sous windows, si un fichier est en cours d'utilisation par un processus, il est alors interdit de renommer/supprimer ce fichier. Je pense que ça vient de la façon dont les fichiers sont référencés pour pouvoir être ouvert.

Hors ligne

#4 Le 01/06/2006, à 00:26

mathesis

Re : [Déplacer un fichier utilisé] comment linux y arrive ?

Merci !

Hors ligne

#5 Le 01/06/2006, à 00:43

samyboy

Re : [Déplacer un fichier utilisé] comment linux y arrive ?

Ya aussi un truc sympa que j'ai remarqé.

Il est possible de modifier un programme lorsqu'il est entrain de tourner. En fait, lorsque je développe, je peux compiler en ayant le programme ouvert (si tu vois ce que veux dire)... ce qui est impossible sous Windows.

Un avantage concret de ce système est, par exemple dans le cas d'un service (apache par exemple) de le mettre à jour sans le fermer... Un seul "graceful restart" du service à la fin de la mise à jour permet une disponibilité à toute épreuve.

note : graceful restart : le service attend qu'il ne soit pas utilisé pour se relancer.


Jabber : sam@fritalk.com ||| Kikoo \o/ rofl ... asv ?
http://www.gnurou.org/Writing/SmartQuestionsFr

Hors ligne