Bir dosyayı sildiğinizde, dosyanın bağlantısını (inode) gerçekten kaldırırsınız. Birisi bu dosyayı zaten açıksa, sahip olduğu dosya tanımlayıcısını korur. Dosya diskte kalır, yer kaplar ve dosyaya erişiminiz varsa bu dosyaya yazılabilir ve dosyadan okunabilir.
unlink
Fonksiyon POSIX tarafından bu davranışı ile tanımlanır:
Dosyanın bağlantı sayısı 0 olduğunda ve hiçbir işlem dosya açılmadığında, dosyanın kapladığı alan serbest bırakılır ve dosyaya artık erişilemez. Son bağlantı kaldırıldığında bir veya daha fazla işlemin dosyası açıksa, bağlantı unlink () döndürülmeden önce kaldırılır, ancak dosyaya yapılan tüm başvurular kapatılana kadar dosya içeriğinin kaldırılması ertelenir .
Bu davranış yüzünden bu tavsiye. Arka plan programı dosyayı açacak ve silindiğini fark etmeyecektir (özellikle izlemiyorsa, ki bu nadirdir). Mevcut dosya tanımlayıcısına yavaşça yazmaya devam edecek: diskte (daha fazla) yer kaplamaya devam edeceksiniz, ancak yazdığı iletileri göremeyeceksiniz, bu yüzden gerçekten en kötüsünüz her iki dünyanın. Dosyayı sıfır uzunluğa keserseniz, alan hemen boşaltılır ve yeni mesajlar, dosyanın görebileceğiniz yeni ucuna eklenir.
Sonunda, arka plan programı sona erdiğinde veya close
dosyayı silerken , alan boşaltılır. Yeni kimse dosyayı bu arada açamaz ( Linux/proc/x/fd/...
gibi sisteme özel yansıtıcı arabirimler dışında ). Ayrıca aşağıdakiler de garanti edilir:
Dosyanın bağlantı sayısı 0 ise, dosyayla ilişkili tüm dosya tanımlayıcıları kapatıldığında, dosyanın kapladığı alan serbest bırakılır ve dosyaya artık erişilemez.
Böylece disk alanınızı kalıcı olarak kaybetmezsiniz, ancak dosyayı silerek hiçbir şey kazanmazsınız ve yeni iletilere erişiminizi kaybedersiniz.
/proc/x/fd/y
? Bu, işlemin dosya tanımlayıcısına yazamamasına neden olur mu yoksa bu geçersiz bir işlem midir?