जवाबों:
यूनिक्स में सभी सामान्य फाइलें हार्डलिंक हैं। यूनिक्स में हार्डलिंक्स (और सबसे अधिक (सभी?)) फाइलसिस्टम का संदर्भ है जिसे ए कहा जाता है inode
। inode
एक संदर्भ काउंटर है, जब आप फाइल करने के लिए एक "लिंक" (जो सामान्य काम करने का ढंग है) काउंटर 1. है जब आप एक दूसरे, तीसरे, चौथे, आदि लिंक बनाने के लिए है, काउंटर वृद्धि की जाती है (वृद्धि हुई) प्रत्येक एक बार से। जब आप rm
एक लिंक को हटाते हैं ( ) तो काउंटर को एक से घटाया (घटाया) जाता है। यदि लिंक काउंटर 0 पर पहुंच जाता है, तो फाइल सिस्टम इसे हटा देता है inode
और उपयोग के लिए उपलब्ध जगह को चिह्नित करता है।
संक्षेप में, जब तक आप अंतिम लिंक को नहीं हटाते हैं तब तक फ़ाइल बनी रहेगी।
Edit:
अंतिम लिंक हटा दिए जाने पर भी फ़ाइल बनी रहेगी । यह उन तरीकों में से एक है जो किसी फ़ाइल में मौजूद डेटा की सुरक्षा को सुनिश्चित करने के लिए किसी अन्य प्रक्रिया के लिए सुलभ नहीं है। फाइलसिस्टम से डेटा को पूरी तरह से हटाने का कार्य केवल तभी किया जाता है जब डेटा में इसके लिंक के रूप में इसकी मेटाडेटा में दिए गए लिंक और किसी भी प्रक्रिया द्वारा उपयोग नहीं किया जा रहा हो।
यह IMHO हार्ड-लिंक (और सॉफ्टलिंक से इसका अंतर) को समझने का अब तक का सबसे आसान तरीका है।
unlink
एड होने पर फ़ाइल खुली होती है ।
/proc
एक अलग (आभासी) फाइल सिस्टम है।
unlink()
एक फ़ाइल को हटाने के लिए कॉल करने से मुझे कोई अंत नहीं हुआ, जब मैंने 1990 के दशक की पहली छमाही में कुछ समय पहले MS-DOS पर C प्रोग्रामिंग के साथ खेलना शुरू किया था। :)
परीक्षण मेरे विचार से आसान था: मैंने एक पाठ फ़ाइल बनाई, फिर इसे कड़ी मेहनत से जोड़ा। हार्ड लिंक को हटाने से उस फ़ाइल को डिलीट नहीं किया जाता है जिसे हार्डलिंक किया जाता है और जिस फाइल को लिंक किया गया था वह वहीं रहती है।
आपकी डिस्क की सभी फाइलें वास्तव में आपके ड्राइव के वास्तविक डेटा की ओर इशारा करती हैं।
जब आप उस फ़ाइल के लिए एक हार्डलिंक बनाते हैं तो हार्डलिंक-एड फ़ाइल उसी डेटा की ओर इशारा करती है जो मूल फ़ाइल इंगित कर रही थी।
इस उदाहरण में, a.txt उस ड्राइव में मौजूद फ़ाइल के डेटा (बाइट्स) की ओर इशारा कर रहा था, जब हार्डलिंक b.txt बनाया जाता है तो यह इंगित करेगा कि a.txt किस ओर इशारा कर रहा है।
इस प्रकार उनमें से एक को हटाने से दूसरे को प्रभावित नहीं किया जाएगा वे एक दूसरे से अलग हो गए हैं।
लेकिन, जब आप दोनों को हटाते हैं, तो सिस्टम यह देखेगा कि डिस्क पर मौजूद डेटा की ओर कोई फ़ाइल नहीं है, इसलिए सिस्टम इसे एक रिक्त स्थान के रूप में मानेगा और जब चाहे तब इसे अधिलेखित कर देगा।
FILE "A.txt"
यह समान है LINK "B.txt"
, विशेष रूप से जैसा कि आपने एक FILE
और एक दूसरे को बुलाया है LINK
। लिंक वास्तव में काला तीर है।
unlink()
।