2012-08-23 13 views
48

यह एक सिद्धांत प्रश्न है। मैंने इंटरनेट पर किसी भी संतोषजनक भाग्य के साथ खोज नहीं की है, मैं सिर्फ यह समझना चाहता हूं कि यह शब्दजाल क्या है। मैंने जावा, जेएसओएन इत्यादि के उदाहरण देखे हैं, लेकिन मुझे Google में नहीं मिला और न ही यहां स्टैक ओवरव्लो में एक सरल स्पष्टीकरण, कोई कोड आवश्यक नहीं है = पी"कैननिकल पथ" क्या है?

तो, एक पूर्ण पथ यह एक निश्चित फ़ाइल पर जाने का एक तरीका है या उस पर पूर्ण मार्ग का वर्णन करने वाला स्थान, पूर्ण पथ, और यह ओएस निर्भर है (उदाहरण के लिए विंडोज और लिनक्स के लिए पूर्ण पथ अलग हैं) एक सापेक्ष पथ यह किसी फ़ाइल या स्थान का मार्ग है जिसे वर्तमान स्थान से वर्णित किया गया है। (दो बिंदु) निर्देशिका पेड़ में एक बेहतर स्तर का संकेत है। यह अब कई सालों से मुझे स्पष्ट कर दिया गया है।

खोज करते समय मैंने देखा है कि कैनोनिकल फाइलें भी हैं! मुझे पता है कि यह कैनोनिकल का मतलब है "नियमों के अनुसार" या कुछ।

क्या कोई मुझे सिद्धांत के सिद्धांतों के बारे में सिद्धांतों के बारे में बता सकता है? =) धन्यवाद !!

पीडी (तो इसके लिए न केवल एक उबंटू यादृच्छिक नाम सब के बाद किया गया था) एक्सडी

PD2 दुर्भाग्य से मैं हर किसी के लिए इस सवाल का जवाब नहीं दे सकता, मैं इसे एक है कि मुझे मदद की सबसे अवधारणा को समझने की दे दी है, लेकिन सभी को बहुत धन्यवाद =)

+5

"एसओ" से आपका मतलब "ओएस" है? क्या तुम फ्रांसीसी हो? –

+0

"सिस्टेम डी शोषण" हां मुझे फ्रेंच पता है, लेकिन मेरा मतलब ओएस (मुझे यह खेद है कि वह खेद है) ऑपरेटिव सिस्टम ... मैं वास्तव में मैक्सिकन हूं एक्सडी – Metafaniel

+4

आह, "सिस्टेमा डे ला ओपेरियॉन, ¡ओले!" (और यह "ऑपरेटिंग सिस्टम" है।) –

उत्तर

62

कुछ भी "कैननिकल" बनाने का पूरा बिंदु यह है कि आप दो चीजों की तुलना कर सकते हैं। उदाहरण के लिए, ../../here/bar/x और ./test/../../bar/x दोनों एक ही स्थान का संदर्भ ले सकते हैं, लेकिन आप दो पथों पर पाठ्य तुलना नहीं कर सकते हैं। हालांकि, अगर आप उन्हें अपने कैननिकल प्रतिनिधित्व में बदल देते हैं, तो वे दोनों ../bar/x बन जाते हैं, और हम देखते हैं कि वे वास्तव में एक ही चीज़ का संदर्भ लेते हैं।

संक्षेप में, यह अक्सर मामला आप एक बात का जिक्र करने के कई तरीके है कि है, और उस मामले में आप एक विहित प्रतिनिधित्व जो अद्वितीय है परिभाषित करने के लिए सक्षम हो सकता है और जो आपको एक पाने के लिए अनुमति देता है इस तरह की चीजों के कर्नल ­ पर संभाल लें।

(आप अधिक उदाहरण के लिए देख रहे हैं, गणित की सभी वस्तुओं के सभी प्रकार के लिए "प्रामाणिक" निर्माण से भरा है, और मन में एक ही उद्देश्य के साथ बहुत ज्यादा है। हो सकता है कि इस Wikipedia article प्रदान कर सकते हैं कुछ विज्ञापन ­ पारंपरिक दिशाओं ।)

+1

ओहह अब मैं देख रहा हूं ... तो संक्षेप में कैनोलिक अद्वितीय होना चाहिए, इसलिए इसका कोई सापेक्ष उपयोग नहीं है दो बिंदुओं। ओह! आपका उत्तर सहायक था;) धन्यवाद – Metafaniel

+0

@ मेटाफैनियल: हाँ, महत्वपूर्ण हिस्सा विशिष्टता है। मुझे लगता है कि आप एक कैनोलिक रिश्तेदार और एक कैनोलिक पूर्ण पथ दोनों हो सकते हैं, लेकिन यह एक स्वतंत्र भेद है। –

+0

सभी उस टिप्पणी तक अच्छा और सही था जब मैं समझ गया था, लेकिन ... एक कैननिकल सापेक्ष पथ? जैसा कि मैंने अभी तक समझा है (सभी को धन्यवाद) कैननिकल पथ प्रकृति द्वारा पूर्ण हैं। आप मुझे कैनोलिक रिश्तेदार पथ के बारे में क्या बता सकते हैं? = एस धन्यवाद =) – Metafaniel

9

एक कैनोलिक पथ को परिभाषित करने का एक अच्छा तरीका होगा: the shortest absolute path (लघु, स्ट्रिंग-लंबाई के अर्थ में)।

यह एक निरपेक्ष पथ और एक विहित पथ के बीच अंतर का एक उदाहरण है:

निरपेक्ष पथ: C:\abc\..\abc\file.txt
विहित पथ: C:\abc\file.txt

+0

@ केरेरेकएसबी के अनुसार पथ को कैनोलिक होने के लिए अद्वितीय होना चाहिए, इसलिए आपके उदाहरण में मैं इसे देख सकता हूं: सी का प्रतिनिधित्व करने का कोई अन्य तरीका नहीं है: \ abc \ file.txt उदाहरण के लिए धन्यवाद =) – Metafaniel

+0

हां, आप एक परिभाषित कर सकते हैं 'कैननिकल पथ' सबसे छोटा पूर्ण पथ (छोटा, स्ट्रिंग-लंबाई के अर्थ में) के रूप में। मैं इसे अपने उत्तर में जोड़ दूंगा। – alfasin

+0

आह ठीक है ठीक है, धन्यवाद, यह अब स्पष्ट है;) – Metafaniel

6

क्या एक विहित मार्ग है (या एक निरपेक्ष से अपने अंतर पथ) प्रणाली निर्भर है।
आमतौर पर यदि (पूर्ण) पथ में उपनाम, शॉर्टकट या प्रतीकात्मक लिंक होते हैं तो कैननिकल पथ इन सभी को संदर्भित वास्तविक निर्देशिकाओं में हल करता है।
उदाहरण: यदि /bin/a एक sym लिंक है, तो आप कहीं भी इसे पूर्ण पथ के लिए अनुरोध कर सकते हैं। java.io.File#getAbsolutePath से वास्तविक फ़ाइल (यानी लिंक का वास्तविक लक्ष्य) i.e usr/local/bin/a एक कैनोलिक पथ के रूप में वापस आ जाएगा।java.io.File#getCanonicalPath

+0

मेरे लिए भी समझने के लिए आपकी टिप्पणी बहुत उपयोगी है! मैंने अभी सीएम लिंक पर भी सोचा नहीं है! तो एक sym लिंक यह पूर्ण है लेकिन canonical नहीं ... बहुत व्यापक। मुझे एक नया संदेह है ... हार्ड लिंक के बारे में क्या? क्या वे पर्याप्त पूर्ण नहीं हैं? धन्यवाद – Metafaniel

+0

निर्भर करता है। उदाहरण के लिए java.io.File # getCanonicalPath हार्ड लिंक को हल नहीं करता – Cratylus

+0

मैंने जावा में इतना विकसित नहीं किया है, मैं मुख्य रूप से एक PHP व्यक्ति हूं;) स्पष्टीकरण के लिए धन्यवाद =) – Metafaniel

1

कैनोलिक पथ के साथ सबसे अधिक समस्या तब होती है जब आप एक डीआईआर का नाम पारित कर रहे हैं और फ़ाइल नहीं। फ़ाइल के लिए, अगर हम पूर्ण पथ प्रदान कर रहे हैं जो कि कैननिकल पथ भी है। लेकिन डीआईआर के लिए इसका मतलब अंतिम "/" को छोड़ना है। उदाहरण के लिए, "/ var/tmp/foo" एक कैनोलिक पथ है जबकि "/ var/tmp/foo /" नहीं है।

संबंधित मुद्दे