J'observe un comportement comme celui-ci sur mon Mac:
- Ouvrez un PDF avec PDF Expert, apportez des modifications au fichier, déplacez le fichier dans le Finder, enregistrez-le dans PDF Expert et il sera correctement enregistré au nouvel emplacement.
- Ouvrez un shell dans un répertoire comme
~/foo
, jetez le répertoire avec une autre application et le pwd du shell sort correctement~/.Trash/foo
.
Que se passe-t-il sous le capot? Ces cas semblent indiquer que les applications ne tiennent pas seulement un chemin absolu du fichier comme emacs (ai-je raison?), Ou est-ce un mécanisme totalement différent?
la source
stat
est une commande plus utile ici quels -di
, car elle vous indique l'ID de volume / périphérique ainsi que l'ID de fichier / numéro d'inode./.vol/
et cela se produit toujours (bien que j'aie besoinpwd -P
, alors seulement la sortie de plainpwd
est mise à jour). Je suppose que les programmes n'ont pas à ouvrir de fichiers via un chemin spécial car en général ils obtiennent (et conservent) des descripteurs de fichiers qui sont de toute façon mappés à des inodes par le noyau. Je soupçonne que sur Mac/.vol/
n'est pas essentiel aussi.bash
sur Debian fait cela. Je coursexec 3<>foo
, puis je me déplacefoo
dans le même système de fichiers,echo whatever >&3
puis je vérifiefoo
le nouvel emplacement - et cela a changé. Bien qu'ilsbash
ne puissent pas rechercher dans le fichier, d'autres programmes en général le peuvent. Mon point n'est/.vol/
pas essentiel, les programmes peuvent facilement fonctionner comme ça sans lui. Ou je ne comprends pas la différence.La réponse ci-dessous est fausse (voir commentaires). Merci d'ignorer
En plus de la bonne réponse thecarpy a donné, il est probable que vos programmes tiennent simplement un fichier poignée , qui est indépendant de l'emplacement des fichiers dans l'arborescence des répertoires (et sur les systèmes Unix persiste même la suppression de fichiers, au moins jusqu'à ce que vous fermiez ).
Un descripteur de fichier est essentiellement l'accès direct au fichier, indépendamment de l'endroit ou de la fréquence (dans le cas des liens physiques) où il existe dans la structure du répertoire.
la source
Bien que je ne sache pas pourquoi macos utilise cela au lieu de la fonctionnalité C standard, en supposant que ce que j'ai lu il y a des années dans "Mac OS X Unleashed" est correct, il s'avère que j'ai encore appris quelque chose de nouveau.
Veuillez regarder le programme C simple suivant:
Compilez le programme, exécutez-le en arrière-plan et rapidement
mv file.txt file2.txt
AVANT que le programme imprime "sommeil terminé, écriture dans un fichier". (vous avez 10 secondes)Notez que
file2.txt
la sortie de votre programme a bien été déplacée avant que le texte ne soit imprimé dans le fichier (via le descripteur de fichier).AVIS DE NON-RESPONSABILITÉ: Je n'ai pas élagué la liste "inclure", cela a été rapidement piraté ensemble pour prouver un point.
la source