कई उपकरणों पर, मुख्य संचालन कंप्यूटर से एक परिधीय को बाइट्स भेजना है, या कंप्यूटर पर एक परिधीय से बाइट्स प्राप्त करना है। ऐसे उपकरण पाइप के समान होते हैं और चरित्र उपकरणों के रूप में अच्छी तरह से काम करते हैं । उन कार्यों के लिए जो पढ़ना और लिखना नहीं है (जैसे धारावाहिक लाइन पर प्रवाह नियंत्रण), डिवाइस 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
पर लिनक्स पर प्रविष्टियां नहीं होती हैं (लेकिन कुछ अन्य यूनिक्स वेरिएंट पर) वीडियो एडेप्टर हैं। सिद्धांत रूप में, सरल वीडियो एडेप्टर को फ्रेमबफ़र उपकरणों के रूप में उजागर किया जा सकता है, जो प्रत्येक पिक्सेल के रंग का प्रतिनिधित्व करने वाले ब्लॉक से बने डिवाइस को ब्लॉक कर सकता है। त्वरित वीडियो एडेप्टर को चरित्र उपकरणों के रूप में दर्शाया जा सकता है जिस पर एप्लिकेशन कमांड भेजते हैं। यहां, डिवाइस इंटरफ़ेस की खामी यह है कि यह धीमा है: प्रदर्शित अनुप्रयोग (व्यवहार में, एक एक्स सर्वर) को कुछ भी प्रदर्शित करते समय कर्नेल कॉल करने की आवश्यकता होगी। इसके बजाय क्या होता है कि एक्स सर्वर ज्यादातर वीडियो एडेप्टर की मेमोरी में सीधे लिखता है, क्योंकि यह तेज है।