क्या प्रत्येक सॉकेट के लिए एक फ़ाइल है?


21

"सब कुछ एक फ़ाइल है" UNIX वर्ल्ड में।

उपरोक्त वाक्य प्रसिद्ध है। जब मैं दौड़ता हूं echo "hello programmer" >> /dev/tty1, तो मैं दिए गए तार को देख सकता हूं TeleType 1 , ...।

प्रति फ़ाइल क्या और कहाँ है socket? मान लीजिए कि मेरा दोस्त मेरे पीसी से कनेक्ट होता है, और इसका आईपी है h.h.h.h, मैं संबंधित फ़ाइल तक कैसे पहुंच सकता हूं? क्या यह संभव है?


3
सॉकेट एपीआई वास्तव में इस संबंध में "यूनिक्स नीति" से विचलन है, क्योंकि यह मूल रूप से बीएसडी से आया था । ध्यान दें कि बेल लैब्स से हमेशा प्लान 9 होता है जो "यूनिक्स से अधिक यूनिक्स" है - यहां तक ​​कि नेटवर्क और ग्राफिक्स एपीआई भी फाइल हैं।
ntoskrnl

सॉकेट्स और प्रक्रियाओं को योजना 9 पत्रों में एक उचित राशि का उल्लेख किया गया है, ज्यादातर इस बारे में बात कर रहे हैं कि यूनिक्स मॉडल कहां गलत हुआ।
1:33 बजे

जवाबों:


9

आदमी 7 यूनिक्स:

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

यानी हर सॉकेट को फ़ाइल के रूप में नहीं देखा जा सकता है ("फ़ाइल नाम के बिना कोई फ़ाइल नहीं" के अर्थ में)।

लेकिन सॉकेट्स (जैसे /proc/net/tcp) की सूची वाली फाइलें हैं ; हालांकि "सब कुछ एक फाइल है" का मतलब नहीं है।


38

एक सॉकेट है एक फ़ाइल। लेकिन सभी फाइलों के नाम नहीं हैं। यहाँ उन फ़ाइलों के कुछ उदाहरण दिए गए हैं जिनमें नाम नहीं हैं:

  • कोई भी फ़ाइल जिसका नाम हुआ करता था, और अब हटा दिया गया है, लेकिन अभी भी एक प्रोग्राम द्वारा खोला गया है।
  • एक अनाम पाइप , जैसे कि |शेल ऑपरेटर द्वारा बनाया गया ।
  • अधिकांश सॉकेट : कोई भी इंटरनेट सॉकेट , या एक यूनिक्स सॉकेट जो फाइलसिस्टम नेमस्पेस में नहीं है (यह अमूर्त नेमस्पेस या अनाम में हो सकता है)।

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

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


यह सही जवाब है।
23

4
/proc/<pid>/fd/*और /proc/net/*दिलचस्प हो सकता है
n611x007 3

कृपया इस उत्तर को स्वीकार करें। यह IMHO बहुत अधिक सटीक है।
user1202136

13

प्रत्येक सॉकेट में क्या और कहाँ फ़ाइल है?

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

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

तो, इस संदर्भ में सभी सॉकेट हैं फ़ाइलों की तरह है, और में एक कड़ी है /proc/[pid]/fd/। आप readlink()इस इनोड पर कॉल भी कर सकते हैं और एक विशेष प्रकार का फ़ाइल नाम प्राप्त कर सकते हैं , जिसका उपयोग कमांड लाइन टूल में किया जाता है जैसे कि lsof, मेरा मानना ​​है; इसी तरह आप सॉकेट डिस्क्रिप्टर के माध्यम से जानकारी प्राप्त कर सकते हैं fstat()


आपका मतलब है "इनकोड द्वारा यूजर्सस्पेस में पहचान"? हर सॉकेट में पोर्ट नंबर नहीं होता है और एक ही पोर्ट नंबर के लिए कई सॉकेट हो सकते हैं (हालांकि इसका कोई मतलब नहीं है)।
हौके लैजिंग

@ हॉकिंग: अच्छी बात है। मैंने दूसरे पैराग्राफ से शुरू होने वाले इस क्लीयर को बनाने के लिए संपादन किया है।
गोल्डीलॉक्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.