Ich beobachte auf meinem Mac ein solches Verhalten:
- Öffnen Sie eine PDF-Datei mit PDF Expert, nehmen Sie einige Änderungen an der Datei vor, verschieben Sie die Datei in Finder, speichern Sie sie in PDF Expert, und sie wird korrekt an der neuen Stelle gespeichert.
- Öffnen Sie eine Shell in einem Verzeichnis wie
~/foo
, werfen Sie das Verzeichnis mit einer anderen App in den Papierkorb und die pwd der Shell wird korrekt ausgegeben~/.Trash/foo
.
Was passiert unter der Haube? Diese Fälle scheinen darauf hinzudeuten, dass Apps nicht nur einen absoluten Pfad der Datei wie Emacs enthalten (habe ich Recht damit?), Oder handelt es sich um einen völlig anderen Mechanismus?
quelle
stat
ist hier ein sinnvollerer Befehl alsls -di
, da er Ihnen die Volume- / Geräte-ID sowie die Datei-ID / Inode-Nummer mitteilt./.vol/
und dies passiert immer noch (obwohl ich brauchepwd -P
, wird nur dann die Ausgabe von plainpwd
aktualisiert). Ich schätze, Programme müssen Dateien nicht über einen speziellen Pfad öffnen, da sie im Allgemeinen Dateideskriptoren erhalten (und behalten), die vom Kernel ohnehin auf Inodes abgebildet werden. Ich vermute, auf dem Mac/.vol/
ist nicht so wichtig.bash
auf Debian macht das. Ich starte, bewege michexec 3<>foo
dannfoo
innerhalb des gleichen Dateisystems undecho whatever >&3
überprüfe dannfoo
den neuen Speicherort - und er wird geändert. Obwohlbash
in der Datei nicht gesucht werden kann, können es andere Programme im Allgemeinen. Mein Punkt ist/.vol/
nicht wesentlich, Programme können ohne es leicht so arbeiten. Oder ich verstehe nicht, was der Unterschied ist.Die Antwort unten ist falsch (siehe Kommentare). Bitte ignorieren
Neben der guten Antwort thecarpy gab, ist es wahrscheinlich , dass Ihre Programme einfach halten eine Datei Griff , das vom Speicherort der Dateien im Verzeichnisbaum unabhängig ist (und auf Unix-Systemen das Löschen der Datei sogar so lange fortsetzt, bis Sie es schließen ).
Ein Datei-Handle ist im Grunde genommen der direkte Zugriff auf die Datei, unabhängig davon, wo oder wie oft (bei Hardlinks) sie in der Verzeichnisstruktur vorhanden ist.
quelle
Ich bin mir nicht sicher, warum MacOS diese Funktion anstelle der Standard-C-Funktionalität verwendet. Vorausgesetzt, dass das, was ich vor Jahren in "Mac OS X Unleashed" gelesen habe, richtig ist, stellte sich heraus, dass ich wieder etwas Neues gelernt habe.
Bitte schauen Sie sich folgendes einfaches C-Programm an:
Kompilieren Sie das Programm, führen Sie es im Hintergrund aus, und
mv file.txt file2.txt
BEVOR das Programm "Beendet den Ruhezustand, Schreiben in eine Datei" ausgibt. (Sie haben 10 Sekunden)Beachten Sie, dass
file2.txt
die Ausgabe Ihres Programms zwar verschoben wurde, bevor der Text in die Datei gedruckt wurde (über den Dateideskriptor).HAFTUNGSAUSSCHLUSS: Ich habe die "include" -Liste nicht gekürzt, dies wurde schnell zusammen gehackt, um einen Punkt zu beweisen.
quelle