नेटवर्क इंटरफेस अन्य उपकरणों की तरह / dev में क्यों नहीं हैं?


70

मैं ज्यादातर उत्सुक हूं, लेकिन नेटवर्क इंटरफेस / देव में क्यों नहीं हैं? क्या कोई अन्य प्रकार के उपकरण हैं जिन्हें नोड / अंडर देव के रूप में प्रस्तुत नहीं किया गया है?


2
मैंने कम से कम एक लेख / शेख़ी के बारे में देखा है कि कैसे मंत्र के बावजूद यूनिक्स में सब कुछ एक फाइल नहीं है, और यह इस समस्या का हवाला देता है। मैं इसे अभी नहीं ढूँढ सकता, लेकिन यह शायद योजना 9 या जीएनयू हर्ड के बारे में एक लेख था।
शॉन जे। गोफ

3
कम से कम सोलारिस के तहत, नेटवर्क इंटरफेस उपकरण / देव (/ उपकरण वास्तव में) के तहत हैं।
jlliagre

2
यूनिक्स में सब कुछ एक फाइल होने का मतलब यह नहीं है कि यह पूरे उपयोगकर्ता के लिए उस तरह से व्यवहार करता है, बस यह कि अंतर्निहित एपीआई फाइल डिस्क्रिप्टर पर समान रूप से और समान रूप से काम करते हैं। जब आप एक सॉकेट खोलते हैं, उदाहरण के लिए, आप उसी तरह का उपयोग कर सकते हैं read()और write()जिस तरह से आप एक फ़ाइल पर करेंगे, लेकिन उपयोगिता कार्य करती है recv()और आपके send()लिए बहुत अधिक लेगवर्क करती है।
जॉन्ग्सच्राफे

1
यह एक ऐसा सवाल था जो मैं खुद से सालों से पूछ रहा था। पूछने के लिए और लोगों को जवाब देने के लिए धन्यवाद!
डोलनोर

जवाबों:


43

कई उपकरणों पर, मुख्य संचालन कंप्यूटर से एक परिधीय को बाइट्स भेजना है, या कंप्यूटर पर एक परिधीय से बाइट्स प्राप्त करना है। ऐसे उपकरण पाइप के समान होते हैं और चरित्र उपकरणों के रूप में अच्छी तरह से काम करते हैं । उन कार्यों के लिए जो पढ़ना और लिखना नहीं है (जैसे धारावाहिक लाइन पर प्रवाह नियंत्रण), डिवाइस ioctl नामक तदर्थ कमांड प्रदान करता है ।

कुछ डिवाइस नियमित फ़ाइलों की तरह बहुत अधिक हैं: वे बाइट्स की एक परिमित संख्या से बने होते हैं, और आप किसी दिए गए स्थान पर जो लिखते हैं उसे बाद में उसी स्थिति से पढ़ा जा सकता है। इन उपकरणों को ब्लॉक डिवाइस कहा जाता है

नेटवर्क इंटरफेस अधिक जटिल हैं: वे जो पढ़ते हैं और लिखते हैं वह बाइट्स नहीं बल्कि पैकेट हैं। हालांकि यह अभी भी सामान्य इंटरफ़ेस का उपयोग करना संभव होगा readऔर write, यह अजीब होगा: संभवतः प्रत्येक कॉल writeपैकेट भेजने के लिए होगा, और प्रत्येक कॉल को readएक पैकेट प्राप्त होगा (और अगर पैकेट फिट करने के लिए बफर बहुत छोटा है) पैकेट खो जाएगा)।

नेटवर्क इंटरफेस केवल उपकरण प्रदान करने के रूप में मौजूद हो सकता है ioctl। वास्तव में, यह कुछ यूनिक्स वेरिएंट है, लेकिन लिनक्स नहीं। इस दृष्टिकोण के लिए कुछ लाभ है; उदाहरण के लिए, लिनक्स पर, नेटवर्क इंटरफेस यूडीवी का लाभ उठा सकता है । लेकिन फायदे सीमित हैं, यही वजह है कि ऐसा नहीं किया गया है।

अधिकांश नेटवर्क-संबंधित एप्लिकेशन व्यक्तिगत नेटवर्क इंटरफेस के बारे में परवाह नहीं करते हैं, वे उच्च स्तर पर काम करते हैं। उदाहरण के लिए, एक वेब ब्राउज़र टीसीपी कनेक्शन बनाना चाहता है, और एक वेब सर्वर टीसीपी कनेक्शन के लिए सुनना चाहता है। इस प्रयोजन के लिए, उच्च-स्तरीय नेटवर्क प्रोटोकॉल के लिए उपयोगी उपकरण क्या होगा, उदा

{ echo $'GET http://www.google.com/ HTTP/1.0\r';
  echo $'Host: www.google.com\r';
  echo $'\r' >&0; cat; } <>/dev/tcp/www.google.com/80

वास्तव में ksh और bash टीसीपी और यूडीपी क्लाइंट के लिए इस तरह का एक इंटरफेस प्रदान करते हैं। सामान्य तौर पर, हालांकि, फ़ाइल-एक्सेसिंग एप्लिकेशन की तुलना में नेटवर्क एप्लिकेशन अधिक जटिल होते हैं। जबकि अधिकांश डेटा एक्सचेंज कॉल के अनुरूप होते हैं readऔर write, कनेक्शन स्थापित करने के लिए केवल एक फ़ाइल नाम की तुलना में अधिक जानकारी की आवश्यकता होती है। उदाहरण के लिए, टीसीपी कनेक्शन के लिए सुनने में दो चरण लगते हैं: एक जब सर्वर सुनना शुरू करता है, और एक ग्राहक द्वारा कनेक्ट होने पर हर बार किया जाता है। ऐसे अतिरिक्त चरण फ़ाइल एपीआई में अच्छी तरह से फिट नहीं होते हैं, जो मुख्य कारण है कि नेटवर्किंग का अपना एपीआई है।

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


2
वास्तव में, त्वरित वीडियो एडेप्टर लिनक्स में DRI के माध्यम से चारदेव के रूप में निर्यात किए जाते हैं । फ़ाइल I / O ऑपरेशन neccessately read/ writeया नहीं हैं ; आप mmapमैप की गई फ़ाइलों और डिवाइस मेमोरी तक सीधी पहुंच के लिए उपयोग कर सकते हैं ।
minmaxavg

11

आप इसे /sys/class/netनिर्देशिका में पा सकते हैं । यह /sys/device/../../मेरी वर्चुअल मशीन (लिनक्स कर्नेल 3.10) आउटपुट के बाद दूसरी फाइल में सिम्बोलिक लिंक है । और आप udevadm info <filename>इसकी विशेषता को देखने के लिए कमांड का उपयोग कर सकते हैं

lrwxrwxrwx. 1 root root 0 Apr  3 13:38 ens33 -> ../../devices/pci0000:00/0000:00:11.0/0000:02:01.0/net/ens33

U & L में आपका स्वागत है। इनलाइन कोड के आसपास हमेशा बैकक्वाट्स का उपयोग करें, खासकर यदि आप <>अन्यथा उपयोग करते हैं जो मार्कअप के रूप में व्याख्या करता है। (आप ASCII प्रतिलेखन के साथ शुरू करने के लिए अपना नाम भी बदलना चाह सकते हैं, क्योंकि सरल कीबोर्ड वाले लोगों को आपके द्वारा किए गए किसी भी टिप्पणी के जवाब में अपने नाम के पहले चरित्र को टाइप करने में कठिनाई होगी)
एंथॉन

9

टीसीपी / आईपी नेटवर्किंग करने के एटी एंड टी / सोलारिस "ट्रांसपोर्ट लेवल इंटरफेस" (टीएलआई) तरीके में विशेष फाइलें हैं जैसे "/ देव / टीसीपी" या "/ देव / यूडपी"। प्रोग्रामर एक विशेष प्रोटोकॉल परिवार की सॉकेट प्राप्त करने के लिए उस विशेष फ़ाइल को खोलता है। मुझे लगता है कि सोलारिस पर सॉकेट्स का उपयोग करने वाले एक प्रोग्राम को संकलित करते समय आपको "-lnsl" करना पड़ता है: यह सब टीएलआई के नीचे है।


4
लिनक्स भी है /dev/tcpऔर /dev/udp, हालांकि अधिकांश गुठली यह अक्षम है।
bahamat

3

हालांकि परंपरागत रूप से लिनक्स पूरी तरह से पॉसिबल नहीं रहा है, अकेले भी किसी भी तरह के ओपन ग्रुप मानकों (शायद एलएसबी के बाहर) का पालन करें। लिनक्स में अधिक UNIX कार्यक्षमता को पोर्ट करने का प्रयास किया गया है।

Glendix एक ऐसी परियोजना है जो Plan9 से / नेट वर्चुअल फाइलसिस्टम का एक पोर्ट प्रदान करती है जो आपको अपने विवरण के रूप में करने की अनुमति देती है।

Plan9 पोर्ट / शुद्ध फाइल सिस्टम से लिनक्स

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.