2010-07-24 9 views
5

limits.h में, और पॉज़िक्स मैनपेज में विभिन्न स्थानों पर, PATH_MAX और NAME_MAX के संदर्भ हैं। ये एक दूसरे से कैसे संबंधित हैं? उनके लिए आधिकारिक दस्तावेज़ीकरण कहां है? मैं उन्हें रन टाइम पर कैसे प्राप्त कर सकता हूं, और (जहां प्रासंगिक) सी, पायथन, और जीएनयू (खोल) वातावरण के लिए संकलन समय?PATH_MAX और NAME_MAX के बीच संबंध क्या है, और मैं कैसे प्राप्त करूं?

उत्तर

4

PATH_MAX फाइल सिस्टम पथ की अधिकतम लंबाई है। NAME_MAX एक फ़ाइल नाम की अधिकतम लंबाई (एक विशेष स्थान पर) है। तो, /foo/barPATH_MAX द्वारा प्रतिबंधित है, और केवल bar भाग की लंबाई इसकी लंबाई NAME_MAX है।

आप _PC_PATH_MAX और _PC_NAME_MAX रूप pathconf के माध्यम से चलाने के समय इन प्राप्त कर सकते हैं, हालांकि मानक अभ्यास संकलन समय पर स्थिर मैक्रो का उपयोग करने के लिए आम तौर पर सिर्फ है। मुझे लगता है कि रन-टाइम विकल्प का उपयोग करना बेहतर होगा क्योंकि आप संभावित रूप से लंबे मूल्यों का समर्थन कर सकते हैं, लेकिन मुझे यकीन नहीं है कि (यदि कोई है) सिस्टम वास्तव में pathconf से वापसी प्रदान करता है जो POSIX_FOO_MAX के मान से अधिक है मान।

+0

क्या आप इस बात पर टिप्पणी कर सकते हैं कि वे पाइथन में उपलब्ध हैं या नहीं? –

+0

@ मैट जॉइनर: आपका प्रश्न केवल सी के लिए समझ में आता है; पायथन या खोल स्क्रिप्टिंग के लिए कोई "संकलन समय" नहीं है। यदि आप एक स्क्रिप्टिंग भाषा का उपयोग कर रहे हैं, तो ये चर आपके लिए उपयोगी होने की संभावना नहीं है - बस अपने पथों में हेरफेर करने के लिए अनिश्चित-लंबाई वाली स्ट्रिंग का उपयोग करें। साथ ही, ये सिस्टम-विशिष्ट चर हैं, और एक पायथन स्क्रिप्ट आदर्श रूप से पोर्टेबल होना चाहिए, इसलिए आप उनका उपयोग नहीं करना चाहेंगे और इसके बजाय फ़ाइल बनाने/एक्सेस करते समय बस "पथ बहुत लंबी" त्रुटियों की जांच करें। – Borealid

+2

मैं पायथन में एक फाइल सिस्टम लिख रहा हूं, इसलिए वे वास्तव में बहुत रुचि रखते हैं। मैं 'os.fpathconf' को अपने डिवाइस फ़ाइल पर' PATH_MAX' के लिए सबसे अच्छा अनुमान के रूप में कॉल कर रहा हूं, और 'NAME_MAX' मेरे कार्यान्वयन की एक संपत्ति है 'struct statvfs' के माध्यम से लौटा दी गई है। पाइथन युक्तियों को याद करने के बावजूद यह एक अच्छा जवाब है। –

0

अधिकांश ऑपरेटिंग सिस्टम पर, PATH_MAX बिल्कुल परिभाषित नहीं किया जाना चाहिए। यह केवल तभी परिभाषित किया जाना चाहिए, यदि ऑपरेटिंग सिस्टम में पथ का वर्णन करने वाली स्ट्रिंग के लिए अधिकतम लंबाई हो, जो कि अधिकांश ऑपरेटिंग सिस्टम में नहीं है; यदि आप मैक्रो के बाहर PATH_MAX का उपयोग करते हैं तो उन मामलों में आपको एक त्रुटि प्राप्त करनी चाहिए।

आपको PATH_MAX के अस्तित्व पर भरोसा करना चाहिए और इसे पूरी तरह से अनदेखा करने का प्रयास करना चाहिए।

PATH_MAX बिल्कुल ऑपरेटिंग सिस्टम पर मौजूद है, वास्तव में एक बग है। जहां तक ​​मुझे पता है, केवल विंडोज ऑपरेटिंग सिस्टम ही इसका सम्मान करते हैं।

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