Jika file dipindahkan (dalam sistem file yang sama) atau diganti namanya, maka pegangan file tetap terbuka dan masih dapat digunakan untuk membaca dan menulis file.
Jika file dihapus, pegangan file tetap terbuka dan masih dapat digunakan (Ini bukan yang diharapkan sebagian orang). File tidak akan benar-benar dihapus hingga pegangan terakhir ditutup.
Jika file tersebut diganti dengan file baru, tergantung persisnya bagaimana. Jika konten file ditimpa, pegangan file akan tetap valid dan mengakses konten baru. Jika tautan file yang ada dibatalkan dan yang baru dibuat dengan nama yang sama atau, jika file baru dipindahkan ke file yang ada menggunakan rename()
, ini sama dengan penghapusan (lihat di atas) - yaitu, pegangan file akan terus merujuk ke asli versi file.
Secara umum, setelah file dibuka, file terbuka, dan tidak ada yang mengubah struktur direktori yang dapat mengubahnya - mereka dapat memindahkan, mengganti nama file, atau meletakkan sesuatu yang lain di tempatnya, itu tetap terbuka.
Di Unix tidak ada hapus, hanya unlink()
, yang masuk akal karena tidak serta merta menghapus file - hanya menghapus tautan dari direktori.
Sebaliknya, jika perangkat yang mendasarinya menghilang (mis. Cabut USB) maka pegangan file tidak akan valid lagi dan kemungkinan akan memberikan IO/kesalahan pada operasi apa pun. Anda masih harus menutupnya. Ini akan berlaku bahkan jika perangkat dicolokkan kembali, karena tidak masuk akal membiarkan file tetap terbuka dalam kasus ini.
Pegangan file mengarah ke inode bukan ke jalur, jadi sebagian besar skenario Anda masih berfungsi seperti yang Anda asumsikan, karena pegangan masih mengarah ke file.
Secara khusus, dengan skenario hapus - fungsi ini disebut "unlink" karena suatu alasan, ini menghancurkan "link" antara nama file (dentry) dan file. Saat Anda membuka file, lalu membatalkan tautannya, file tersebut sebenarnya masih ada hingga jumlah referensinya menjadi nol, yaitu saat Anda menutup gagangnya.
Edit: Dalam hal perangkat keras, Anda telah membuka pegangan ke node perangkat tertentu, jika Anda mencabut perangkat, kernel akan gagal untuk semua akses ke sana, bahkan jika perangkat kembali. Anda harus menutup perangkat dan membukanya kembali.
Saya tidak yakin tentang operasi lain, tetapi untuk penghapusan:Penghapusan tidak terjadi (secara fisik, yaitu dalam sistem file) sampai pegangan terbuka terakhir untuk file ditutup. Oleh karena itu, tidak mungkin untuk menghapus file dari bawah aplikasi Anda.
Beberapa aplikasi (yang tidak terlintas dalam pikiran) mengandalkan perilaku ini, dengan membuat, membuka, dan segera menghapus file, yang kemudian hidup persis selama aplikasi - memungkinkan aplikasi lain mengetahui siklus hidup aplikasi pertama tanpa perlu lihat peta proses dan semacamnya.
Kemungkinan pertimbangan serupa berlaku untuk hal-hal lain.