जवाबों:
दोनों एक ही मूल कार्य के लिए एक आवरण है जो एक unlink()
सिस्टम कॉल है।
उपयोगकर्ता के उपयोग के बीच के अंतरों को तौलना।
rm(1)
:
unlink(1)
:
rm(1)
कई तर्क देने के साथ तुलना करने पर धीमी ।आप इसके साथ अंतर प्रदर्शित कर सकते हैं:
$ touch $(seq 1 100)
$ unlink $(seq 1 100)
unlink: extra operand `2'
$ touch $(seq 1 100)
$ time rm $(seq 1 100)
real 0m0.048s
user 0m0.004s
sys 0m0.008s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do rm $i; done
real 0m0.207s
user 0m0.044s
sys 0m0.112s
$ touch $(seq 1 100)
$ time for i in $(seq 1 100); do unlink $i; done
real 0m0.167s
user 0m0.048s
sys 0m0.120s
हालांकि अगर हम सिस्टम unlink(2)
फ़ंक्शन के लिए एक अनधिकृत कॉल के बारे में बात कर रहे हैं , जो मुझे अब पता चलता है कि शायद आप उसके लिए लेखांकन नहीं कर रहे हैं।
आप unlink()
निर्देशिका और फ़ाइलों पर समान रूप से एक प्रणाली कर सकते हैं । लेकिन अगर निर्देशिका अन्य निर्देशिकाओं और फ़ाइलों के लिए एक माता-पिता है, तो उस माता-पिता का लिंक हटा दिया जाएगा, लेकिन बच्चों को झूलना छोड़ दिया जाएगा। जो आदर्श से कम है।
संपादित करें:
क्षमा करें, unlink(1)
और के बीच का अंतर स्पष्ट किया unlink(2)
। शब्दार्थ अभी भी मंच के बीच भिन्न होने जा रहे हैं।
mkdir -p 1/2/3; touch 1/one 1/2/two 1/2/3/three; rm -ri 1
:। यदि आपने मूल निर्देशिका को अनलिंक किया है, तो बच्चों द्वारा उपयोग किए जाने वाले स्थान को ऐसे समय तक खो दिया जाना चाहिए जब तक कि फेक को विसंगति का पता न चल जाए।
POSIX कल्पना स्तर पर, जो rm करता है वह अनलिंक करने की तुलना में बहुत अधिक कसकर निर्दिष्ट होता है।
परिणाम की पोर्टेबिलिटी rm के उपयोग से बेहतर होने की संभावना है, यदि आपकी स्क्रिप्ट को OS के पार चलाना है।