कौन सी यूनिक्स जैसी प्रणाली वास्तव में / dev / tcp विशेष फ़ाइल प्रदान करती है?


9

मुझे पता /dev/tcp/<host>/<port>है कि पुनर्निर्देशन में कुछ गोले द्वारा विशेष रूप से संभाला एक जादू का रास्ता है। लेकिन इसके अनुसार man bash:

यदि ऑपरेटिंग सिस्टम जिस पर बैश चल रहा है वह इन विशेष फ़ाइलों को प्रदान करता है, तो बैश उनका उपयोग करेगा; अन्यथा यह उन्हें आंतरिक रूप से अनुकरण करेगा [...]

लिनक्स बॉक्स पर मैं अभी उपयोग कर रहा हूं, /dev/tcpविशेष फाइल मौजूद नहीं है, इसलिए बैश इसका अनुकरण करेगा। लेकिन, क्या वास्तव में एक यूनिक्स जैसी प्रणाली /dev/tcpहै जो बैश द्वारा समर्थित एक ही अर्थ के साथ विशेष फ़ाइल प्रदान करती है ?


इसके लिए एक उत्सर्जित निर्देशिका की आवश्यकता होगी। केवल विशेष फाइलसिस्टम के साथ एमुलेटेड डायरेक्टरी बनाना संभव है, उदाहरण के लिए प्रूफ़ या सिसफ़्स ऐसा कर सकते हैं। /devवर्तमान linuxes पर एक tmpfs है, और यह पुराने लोगों में रूट विभाजन पर था। यही कारण है कि वर्तमान में यह असंभव है। यह एक sysfs या procfs एक्सटेंशन के साथ आसानी से संभव बनाया जा सकता है (दोनों fs बहुत लचीले और समान हैं (वास्तव में शायद कोई नहीं जानता कि वे समान क्यों नहीं हैं)), आज कोई भी ऐसा नहीं करता है, लेकिन इसे लगभग 100 में बनाया जा सकता है कोड की लाइनें।
पेटेर - मोनिका

लेकिन क्या कोई अन्य ओएस है जो पहले से ही करता है? कुछ बिंदु पर, मैंने सोचा था कि योजना 9 ने ऐसा किया था लेकिन मैं गलत था।
सिल्वेन लेरॉक्स

1
मुझे नहीं पता, शायद नहीं (जहां तक ​​मुझे पता है, यह एक बैश आविष्कार है)। मैंने आपके सवाल का जवाब दिया, क्योंकि इसका जवाब मेरे लिए भी दिलचस्प है। जहाँ तक मुझे पता है, कोई भी लोकप्रिय x86- सक्षम यूनिक्स ओएस ऐसा नहीं कर सकता है।
पीटर - मोनिका

जवाबों:


8

मुझे लगता है कि बैश प्रलेखन इस विषय पर कुछ भ्रामक है। कोड को देखते हुए, यहां तक ​​कि संस्करण 2.04 पर वापस जाना जहां नेटवर्क पुनर्निर्देशन पेश किया गया था, /dev/tcpऔर /dev/udpनिम्नानुसार काम करता है:

  • निर्माण के समय, configureस्क्रिप्ट यह देखने के लिए जांच करती है कि क्या विभिन्न नेटवर्किंग सुविधाएँ समर्थित हैं; यदि ऐसा है, तो यदि नेटवर्क पुनर्निर्देशन सक्षम है (जो डिफ़ॉल्ट रूप से मामला है), आंतरिक नेटवर्किंग कोड में बनाया गया है;
  • रन टाइम के दौरान, यदि आंतरिक नेटवर्किंग कोड बनाया गया है, /dev/tcpऔर /dev/udp(सही प्रारूप में) आंतरिक रूप से नियंत्रित किया जाता है; अन्यथा, एक चेतावनी का उत्पादन किया जाता है ("/ dev / (tcp | udp) / होस्ट / पोर्ट नेटवर्किंग के बिना समर्थित नहीं है") और बैश सिस्टम पर दिए गए मार्ग को खोलने का प्रयास करता है;
  • यदि नेटवर्क पुनर्निर्देशन को कॉन्फ़िगर किया गया है, तो कुछ विशेष नहीं किया जाता है।

यह क्या है:

  • यदि नेटवर्क पुनर्निर्देशन सक्षम है:
    • यदि नेटवर्किंग लक्ष्य प्लेटफ़ॉर्म पर समर्थित है, /dev/tcpऔर /dev/udpहमेशा आंतरिक रूप से नियंत्रित किया जाएगा;
    • अन्यथा, बैश चेतावनी देगा और फ़ाइल को "नेत्रहीन" खोलने की कोशिश करेगा; यदि सिस्टम किसी तरह का समर्थन करता है /dev/(tcp|udp)/host/port, तो इसका उपयोग किया जाएगा, अन्यथा सभी संभावना में पुनर्निर्देशन विफल हो जाएगा;
  • यदि नेटवर्क पुनर्निर्देशन अक्षम है, तो कोई विशेष हैंडलिंग नहीं की जाती है; ऊपर के रूप में, यदि सिस्टम किसी तरह का समर्थन करता है /dev/(tcp|udp)/host/port, तो इसका उपयोग किया जाएगा, अन्यथा सभी संभावना में पुनर्निर्देशन विफल हो जाएगा।

/dev/tcpकुछ प्रणालियों पर मौजूद है, लेकिन जहां तक ​​मुझे पता है कोई भी बैश के समान अमूर्तता का समर्थन नहीं करता है। Solaris पर, नेटवर्क कॉन्फ़िगरेशन को क्वेरी और बदलने के /dev/tcpलिए nddउपकरण के साथ उपयोग किया जाता है। में XTI (यह भी देखें ओपन समूह करता है, तो आप एक सदस्य हैं), t_openसमारोह के साथ इस्तेमाल किया जा सकता /dev/tcpTCP कनेक्शन को खोलने के लिए, लेकिन यह प्रयोग नहीं करता है पथ आधारित सेटअप, वहाँ लक्ष्य मेजबान निर्दिष्ट करने के लिए एक अलग डेटा संरचना है और पोर्ट (और अन्य पैरामीटर)।


फीचर ksh93 से ही आता है। SysV सिस्टम पर dev / tcp STREAMS tcp मॉड्यूल पर एक हैंडल होगा ।
स्टीफन चेजलस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.