Saya mengamati perilaku seperti ini di Mac saya:
- Buka PDF dengan PDF Expert, buat beberapa perubahan pada file, pindahkan file dalam Finder, simpan dalam PDF Expert dan itu akan disimpan dengan benar ke tempat baru.
- Buka shell di direktori like
~/foo
, trash direktori dengan aplikasi lain dan pwd shell dengan benar output~/.Trash/foo
.
Apa yang terjadi di bawah tenda? Kasus-kasus ini tampaknya menunjukkan aplikasi tidak hanya memegang jalur absolut dari file seperti emacs (apakah saya benar dengan ini?), Atau apakah itu mekanisme yang sama sekali berbeda?
sumber
stat
adalah perintah yang lebih berguna di sini daripadals -di
, karena ini memberi tahu Anda volume / ID perangkat serta ID file / nomor inode./.vol/
dan ini masih terjadi (walaupun saya perlupwd -P
, hanya kemudian output dari polospwd
diperbarui). Saya kira program tidak harus membuka file melalui jalur khusus apa pun karena secara umum mereka mendapatkan (dan menyimpan) deskriptor file yang dipetakan ke inode oleh kernel. Saya kira di Mac/.vol/
juga tidak penting.bash
on Debian melakukan itu. Saya menjalankanexec 3<>foo
, kemudian pindahfoo
dalam sistem file yang samaecho whatever >&3
,, lalu memeriksafoo
di lokasi baru - dan itu berubah. Meskipunbash
tidak dapat mencari di dalam file, program lain secara umum bisa. Maksud saya/.vol/
adalah tidak penting, program dapat dengan mudah bekerja seperti ini tanpanya. Atau saya tidak mengerti apa bedanya.Jawaban di bawah ini salah (lihat komentar). Tolong abaikan
Selain jawaban baik yang diberikan oleh kuburan, kemungkinan program Anda hanya memegang file handle , yang tidak tergantung pada lokasi file di pohon direktori (dan pada sistem Unix bahkan bertahan penghapusan file, setidaknya sampai Anda menutupnya. ).
Pegangan file pada dasarnya adalah akses langsung ke file, terlepas dari di mana atau seberapa sering (dalam kasus hardlink) itu ada dalam struktur direktori.
sumber
Sementara saya tidak yakin mengapa makro menggunakan ini alih-alih fungsi C standar, dengan anggapan apa yang saya baca tahun lalu di "Mac OS X Unleashed" benar, ternyata saya belajar sesuatu yang baru, lagi.
Silakan lihat program C sederhana berikut:
Kompilasi program, jalankan di latar belakang dan dengan cepat
mv file.txt file2.txt
SEBELUM program mencetak "Selesai tidur, menulis ke file." (Anda punya 10 detik)Perhatikan bahwa
file2.txt
memiliki output dari program Anda meskipun dipindahkan sebelum teks dicetak ke file (melalui deskriptor file).PENOLAKAN: Saya belum memotong daftar "sertakan", ini dengan cepat diretas bersama untuk membuktikan suatu hal.
sumber