2016-01-16 5 views
11

यूनिक्स सॉकेट बनाते समय, पथ का नाम (man 7 unix) अधिकतम 108 वर्ण लंबा होने की अनुमति है। एक दोस्त के लिए इसने अपने कार्यक्रम में एक बग का कारण बना दिया क्योंकि उसका रास्ता लंबा था। अब हम आश्चर्य करते हैं कि वास्तव में यह संख्या कैसे निर्धारित की गई थी।लिनक्स 108 पर यूनिक्स-सॉकेट के लिए अधिकतम पथ लंबाई क्यों दी गई है?

मैं संदेह है कि इतना है कि कि struct sockaddr_un की sizeofsockaddr_in जैसे अन्य sockaddresses की sizeof की तुलना में है स्पष्ट संख्या निर्धारित किया गया था की है। लेकिन अगर वे अन्य आकारों के साथ संघर्ष से बचना चाहते हैं, उदाहरण के लिए प्राइम नंबर का उपयोग क्यों न करें? क्या कोई इसके लिए एक अधिकृत स्रोत प्रदान कर सकता है?

+2

एक प्रमुख संख्या अन्य प्रकार के आकार से क्यों बचेंगी? –

+0

@EdHeal शायद मैं गलत हूं लेकिन गुणक-ऑफ -2 (संरेखण के कारण) जोड़ना अब एक संरचना को इसके आकार से मेल नहीं खाएगा। वैकल्पिक रूप से मैं पूछ सकता था, फिर भी एक संख्या का उपयोग क्यों करें यदि लक्ष्य संघर्ष से बचने के लिए होगा? जो इंगित करता है कि संख्या के बारे में मेरा संदेह गलत हो सकता है। –

+1

माना जाता है कि बहुत सारी संरचनाएं जुड़वाओं में से कई हैं (शायद उनमें से आधा)। लेकिन कुछ प्राइम संख्या का आकार बनाना संघर्ष से बच नहीं आता है। वैसे भी ऐसा करने का मुद्दा क्या है यदि प्रोग्रामर को यह मौलिक हिस्सा गलत हो रहा है और गलत संरचना का उपयोग कर रहा है। –

उत्तर

3

यदि आप इसे कभी नहीं पा सकते हैं तो इसका मतलब यह है कि खोजने के लिए कुछ भी नहीं है। लेकिन इसका मतलब यह भी हो सकता है कि आप इसे नहीं ढूंढ पाए। हालांकि, मैं अब तक जो साझा करता हूं उसे साझा करना चाहता हूं और

मुझे लगता है कि यह संख्या कर्कश है।

मेरा अनुमान है GNU C Library से इन दो बयानों द्वारा समर्थित है:

char sun_path[108]

यह उपयोग करने के लिए फ़ाइल का नाम है। अपूर्ण: 108 एक जादू संख्या क्यों है? आरएमएस ने फ़ाइल नाम की लंबाई के आधार पर उचित मात्रा में संग्रहण आवंटित करने के लिए आवंटन का उपयोग करने के लिए उदाहरण उदाहरण को शून्य-लंबाई सरणी बनाने और सुझाव देने का सुझाव दिया है।

(कहाँ आरएमएस होना चाहिए रिचर्ड एम स्टॉलमैन (एक और अनुमान))

दिनांक प्रकार: struct sockaddr
...

char sa_data[14]

यह वह जगह है वास्तविक सॉकेट पता डेटा, जो प्रारूप-निर्भर है। इसकी लंबाई भी प्रारूप पर निर्भर करती है, और 14 से अधिक हो सकती है। की लंबाई 14 sa_data अनिवार्य रूप से मनमाने ढंग से है।

पीएस: पता नहीं क्यों लेकिन इस तरह के प्रश्न मुझे वास्तव में उत्सुक बनाते हैं।

4

यह एक सुविधाजनक कर्नेल डेटा संरचना में उपलब्ध स्थान से मेल खाना था।

संपादित करें:

का हवाला देते हुए "डिजाइन और 4.4BSD ऑपरेटिंग सिस्टम के कार्यान्वयन" McKusick एट द्वारा। अल। (पेज 369):

स्मृति प्रबंधन सुविधाओं डेटा संरचना एक mbuf कहा जाता है के चारों ओर घूमना। एमबीएफएस, या मेमोरी बफर, 128 बाइट्स लंबे हैं, 100 या इस डेटा के 108 बाइट डेटा स्टोरेज के लिए आरक्षित हैं।

+0

क्या आप सक्षम हैं कुछ और विनिर्देश प्रदान करें (जैसे प्रश्न में कर्नेल डेटा संरचना)? –

+0

@MichaelBurr उत्तर कुछ विवरण के साथ संपादित किया गया। –

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