जब आप किसी फ़ाइल को हटाते हैं तो आप वास्तव में फ़ाइल (इनोड) के लिए लिंक हटा देते हैं। यदि किसी के पास पहले से ही वह फाइल खुली है, तो वे उस फाइल डिस्क्रिप्टर को रखने के लिए मिल जाते हैं जो उनके पास है। फ़ाइल डिस्क पर रहती है, स्थान ले रही है, और यदि आप इसे एक्सेस कर सकते हैं तो इसे लिखा और पढ़ा जा सकता है।
unlink
समारोह POSIX करके इस व्यवहार के साथ परिभाषित किया गया है:
जब फ़ाइल की लिंक गणना 0 हो जाती है और किसी भी प्रक्रिया में फ़ाइल नहीं होती है, तो फ़ाइल पर कब्जा कर लिया गया स्थान खाली कर दिया जाएगा और फ़ाइल अब सुलभ नहीं होगी। यदि अंतिम लिंक हटाए जाने पर एक या अधिक प्रक्रियाओं में फ़ाइल खुली होती है, तो लिंक को अनलिंक () रिटर्न से पहले हटा दिया जाएगा, लेकिन फ़ाइल के सभी संदर्भ बंद होने तक फ़ाइल सामग्री को हटा दिया जाएगा ।
उस व्यवहार के कारण सलाह का यह टुकड़ा। डेमॉन में फ़ाइल खुली होगी, और यह ध्यान नहीं देगा कि इसे हटा दिया गया है (जब तक कि यह विशेष रूप से इसकी निगरानी नहीं कर रहा है, जो असामान्य है)। यह मौजूदा फ़ाइल डिस्क्रिप्टर के पास स्पष्ट रूप से लिखता रहेगा: आप डिस्क पर (अधिक) स्थान लेते रहेंगे, लेकिन आप इसे लिखे गए किसी भी संदेश को नहीं देख पाएंगे, इसलिए आप वास्तव में सबसे खराब स्थिति में हैं दोनों दुनिया के। यदि आप इसके बजाय फ़ाइल को शून्य लंबाई तक काटते हैं, तो स्थान तुरंत मुक्त हो जाता है, और किसी भी नए संदेश को फ़ाइल के नए सिरे पर जोड़ा जाएगा जहां आप उन्हें देख सकते हैं।
आखिरकार, जब डेमॉन close
फ़ाइल को समाप्त या बंद कर देता है , तो अंतरिक्ष को मुक्त कर दिया जाएगा। मतलब समय में कोई भी फाइल नहीं खोल सकता है (सिस्टम-विशिष्ट चिंतनशील इंटरफेस जैसे लिनक्स के/proc/x/fd/...
माध्यम से अन्य )। यह भी गारंटी है कि:
यदि फ़ाइल की लिंक गणना 0 है, जब फ़ाइल से जुड़े सभी फ़ाइल विवरणक बंद हो जाते हैं, तो फ़ाइल के कब्जे वाले स्थान को मुक्त कर दिया जाएगा और फ़ाइल अब सुलभ नहीं होगी।
इसलिए आप अपने डिस्क स्थान को स्थायी रूप से नहीं खोते हैं, लेकिन आप फ़ाइल को हटाकर कुछ भी हासिल नहीं करते हैं और आप नए संदेशों तक पहुंच खो देते हैं।
/proc/x/fd/y
? क्या यह प्रक्रिया फ़ाइल डिस्क्रिप्टर पर लिखने में विफल हो सकती है, या क्या यह एक अवैध संचालन है?