डिवाइस फ़ाइल: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 21: Line 21:
[[File:Simplified Structure of the Linux Kernel.svg|thumb|लिनक्स कर्नेल की एक सरलीकृत संरचना। फाइल प्रणाली I/O सबप्रणाली के भाग के रूप में कार्यान्वित किए जाते हैं।]]डिवाइस नोड्स उन संसाधनों के अनुरूप होते हैं जो ऑपरेटिंग प्रणाली के कर्नेल (कंप्यूटर साइंस) ने पहले ही आवंटित कर दिए हैं। यूनिक्स उन संसाधनों की प्रमुख संख्या और छोटी संख्या द्वारा पहचान करता है,<ref>{{cite book |title=यूनिक्स प्रोग्रामिंग पर्यावरण|page=[https://archive.org/details/unixprogramminge0000kern/page/66 66] |author-first1=Brian W. |author-last1=Kernighan |author-link1=Brian W. Kernighan |author-first2=Rob |author-last2=Pike |author-link2=Rob Pike |publisher=[[Prentice-Hall]] |date=1984 |isbn=0-13-937681-X |url-access=registration |url=https://archive.org/details/unixprogramminge0000kern/page/66 }}</ref> दोनों [[नोड (कंप्यूटर विज्ञान)]] की संरचना के भाग के रूप में संग्रहीत हैं। इन नंबरों का असाइनमेंट भिन्न-भिन्न [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] और भिन्न-भिन्न [[ कंप्यूटर मंच |कंप्यूटर प्लेटफॉर्म]] पर विशिष्ट रूप से होता है। सामान्यतः, प्रमुख संख्या डिवाइस ड्राइवर की पहचान करती है और छोटी संख्या विशेष डिवाइस (संभवतः कई में से) की पहचान करती है जिसे ड्राइवर नियंत्रित करता है:<ref>{{cite web |author=Neil Brown |title=Ghosts of Unix Past: a historical search for design patterns |website=Linux Weekly News |date=October 27, 2010 |access-date=30 March 2014 |url=https://lwn.net/Articles/411845/}}</ref> इस स्थिति में, प्रणाली ड्राइवर को माइनर नंबर दे सकता है। चूँकि, डायनेमिक नंबर आवंटन की उपस्थिति में, यह विषय नहीं हो सकता है (उदाहरण के लिए फ्रीबीएसडी 5 और ऊपर)।
[[File:Simplified Structure of the Linux Kernel.svg|thumb|लिनक्स कर्नेल की एक सरलीकृत संरचना। फाइल प्रणाली I/O सबप्रणाली के भाग के रूप में कार्यान्वित किए जाते हैं।]]डिवाइस नोड्स उन संसाधनों के अनुरूप होते हैं जो ऑपरेटिंग प्रणाली के कर्नेल (कंप्यूटर साइंस) ने पहले ही आवंटित कर दिए हैं। यूनिक्स उन संसाधनों की प्रमुख संख्या और छोटी संख्या द्वारा पहचान करता है,<ref>{{cite book |title=यूनिक्स प्रोग्रामिंग पर्यावरण|page=[https://archive.org/details/unixprogramminge0000kern/page/66 66] |author-first1=Brian W. |author-last1=Kernighan |author-link1=Brian W. Kernighan |author-first2=Rob |author-last2=Pike |author-link2=Rob Pike |publisher=[[Prentice-Hall]] |date=1984 |isbn=0-13-937681-X |url-access=registration |url=https://archive.org/details/unixprogramminge0000kern/page/66 }}</ref> दोनों [[नोड (कंप्यूटर विज्ञान)]] की संरचना के भाग के रूप में संग्रहीत हैं। इन नंबरों का असाइनमेंट भिन्न-भिन्न [[ऑपरेटिंग सिस्टम|ऑपरेटिंग प्रणाली]] और भिन्न-भिन्न [[ कंप्यूटर मंच |कंप्यूटर प्लेटफॉर्म]] पर विशिष्ट रूप से होता है। सामान्यतः, प्रमुख संख्या डिवाइस ड्राइवर की पहचान करती है और छोटी संख्या विशेष डिवाइस (संभवतः कई में से) की पहचान करती है जिसे ड्राइवर नियंत्रित करता है:<ref>{{cite web |author=Neil Brown |title=Ghosts of Unix Past: a historical search for design patterns |website=Linux Weekly News |date=October 27, 2010 |access-date=30 March 2014 |url=https://lwn.net/Articles/411845/}}</ref> इस स्थिति में, प्रणाली ड्राइवर को माइनर नंबर दे सकता है। चूँकि, डायनेमिक नंबर आवंटन की उपस्थिति में, यह विषय नहीं हो सकता है (उदाहरण के लिए फ्रीबीएसडी 5 और ऊपर)।


अन्य विशेष फ़ाइल प्रकारों की तरह, कंप्यूटर प्रणाली मानक प्रणाली कॉल का उपयोग करके डिवाइस नोड्स तक पहुँचता है और उन्हें नियमित कंप्यूटर फ़ाइलों की तरह व्यवहार करता है। दो मानक प्रकार की डिवाइस फ़ाइलें उपस्थित हैं; दुर्भाग्य से उनके नाम ऐतिहासिक कारणों से प्रति-सहज हैं, और परिणामस्वरूप दोनों के मध्य अंतर की व्याख्या अक्सर गलत होती है।
अन्य विशेष फ़ाइल प्रकारों के जैसे, कंप्यूटर प्रणाली मानक प्रणाली कॉल का उपयोग करके डिवाइस नोड्स तक पहुँचता है और उन्हें नियमित कंप्यूटर फ़ाइलों के जैसे व्यवहार करता है। दो मानक प्रकार की डिवाइस फ़ाइलें उपस्थित हैं; दुर्भाग्य से उनके नाम ऐतिहासिक कारणों से प्रति-सहज हैं, और परिणामस्वरूप दोनों के मध्य अंतर की व्याख्या प्रायः त्रुटिपूर्ण होती है।


=== वर्ण उपकरण ===
=== वर्ण उपकरण ===
कैरेक्टर स्पेशल फाइल्स या कैरेक्टर डिवाइस हार्डवेयर डिवाइस तक बिना बफर, सीधी पहुंच प्रदान करते हैं। जरूरी नहीं कि वे कार्यक्रमों को एक बार में एक अक्षर को पढ़ने या लिखने की अनुमति दें; यह प्रश्न में डिवाइस पर निर्भर है। उदाहरण के लिए, हार्ड डिस्क के लिए कैरेक्टर डिवाइस को सामान्य रूप से आवश्यकता होगी कि सभी पढ़ने और लिखने को ब्लॉक सीमाओं के साथ गठबंधन किया जाए और सबसे निश्चित रूप से एक बाइट को पढ़ने की अनुमति नहीं दी जाएगी।
कैरेक्टर स्पेशल फाइल्स या कैरेक्टर डिवाइस हार्डवेयर डिवाइस तक बिना बफर, सीधी पहुंच प्रदान करते हैं। आवश्यक नहीं कि वे प्रोग्रामो को एक बार में अक्षर को पढ़ने या लिखने की अनुमति दें; यह प्रश्न डिवाइस पर निर्भर है। उदाहरण के लिए, हार्ड डिस्क के लिए कैरेक्टर डिवाइस को सामान्य रूप से आवश्यकता होगी कि सभी पढ़ने और लिखने को ब्लॉक सीमाओं के साथ गठबंधन किया जाए और सबसे निश्चित रूप से एक बाइट को पढ़ने की अनुमति नहीं दी जाएगी।


चरित्र उपकरणों को कभी-कभी कच्चे उपकरणों के रूप में जाना जाता है ताकि इस तथ्य के आस-पास के भ्रम से बचा जा सके कि ब्लॉक-आधारित हार्डवेयर के एक टुकड़े के लिए एक चरित्र डिवाइस को सामान्यतः संरेखित ब्लॉकों को पढ़ने और लिखने के लिए प्रोग्राम की आवश्यकता होगी।
करैक्टर उपकरणों को कभी-कभी रॉ उपकरणों के रूप में जाना जाता है जिससे इस तथ्य के निकट के भ्रम से बचा जा सके कि ब्लॉक-आधारित हार्डवेयर के टुकड़े के लिए करैक्टर डिवाइस को सामान्यतः संरेखित ब्लॉकों को पढ़ने और लिखने के लिए प्रोग्राम की आवश्यकता होगी।


===ब्लॉक डिवाइस ===
===ब्लॉक डिवाइस ===
विशेष फ़ाइलों को ब्लॉक करें या डिवाइस को ब्लॉक करें, हार्डवेयर डिवाइस को बफ़र्ड एक्सेस प्रदान करें, और उनकी बारीकियों से कुछ अमूर्तता प्रदान करें।<ref>{{cite web|title=IEEE Std 1003.1, 2013 Edition|url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_79|access-date=24 April 2014}}</ref> चरित्र उपकरणों के विपरीत, ब्लॉक डिवाइस हमेशा प्रोग्रामर को किसी भी आकार (एकल अक्षर/बाइट सहित) और किसी भी संरेखण के ब्लॉक को पढ़ने या लिखने की अनुमति देगा। नकारात्मक पक्ष यह है कि क्योंकि ब्लॉक डिवाइस बफ़र किए जाते हैं, प्रोग्रामर को यह नहीं पता होता है कि कर्नेल के बफ़र्स से लिखित डेटा को वास्तविक डिवाइस पर पास करने में कितना समय लगेगा, या वास्तव में किस क्रम में भौतिक डिवाइस पर दो अलग-भिन्न राइट्स आएंगे। इसके अतिरिक्त, यदि एक ही हार्डवेयर कैरेक्टर और ब्लॉक डिवाइस दोनों को उजागर करता है, तो कैरेक्टर डिवाइस का उपयोग करने वाले क्लाइंट को ब्लॉक डिवाइस के बफ़र्स में किए गए परिवर्तनों से अनजान होने के कारण डेटा भ्रष्टाचार का खतरा होता है।
विशेष फाइलों को ब्लॉक करें या ब्लॉक डिवाइस हार्डवेयर उपकरणों को बफर्ड एक्सेस प्रदान करें, और साधारण से कुछ सार प्रदान करें।<ref>{{cite web|title=IEEE Std 1003.1, 2013 Edition|url=http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap03.html#tag_03_79|access-date=24 April 2014}}</ref> कैरेक्टर उपकरणों के विपरीत, ब्लॉक डिवाइस सदैव प्रोग्रामर को किसी भी आकार (एकल अक्षर/बाइट सहित) और किसी भी संरेखण के ब्लॉक को पढ़ने या लिखने की अनुमति देगा। नकारात्मक पक्ष यह है कि क्योंकि ब्लॉक डिवाइस बफ़र किए जाते हैं, प्रोग्रामर को यह नहीं ज्ञात होता है कि कर्नेल के बफ़र्स से लिखित डेटा को वास्तविक डिवाइस पर पास करने में कितना समय लगेगा, या वास्तव में किस क्रम में भौतिक डिवाइस पर दो भिन्न-भिन्न राइट्स आएंगे। इसके अतिरिक्त, यदि हार्डवेयर कैरेक्टर और ब्लॉक डिवाइस दोनों को उजागर करता है, तो कैरेक्टर डिवाइस का उपयोग करने वाले क्लाइंट को ब्लॉक डिवाइस के बफ़र्स में किए गए परिवर्तनों से अपरिचित होने के कारण डेटा भ्रष्टाचार की आशंका होती है।


अधिकांश प्रणाली हार्ड डिस्क जैसे हार्डवेयर का प्रतिनिधित्व करने के लिए ब्लॉक और कैरेक्टर डिवाइस दोनों बनाते हैं। FreeBSD और Linux विशेष रूप से नहीं; पूर्व ने ब्लॉक उपकरणों के लिए समर्थन हटा दिया है,<ref>{{cite web|title=फ्रीबीएसडी आर्किटेक्चर हैंडबुक|url=http://www.freebsd.org/doc/en/books/arch-handbook/driverbasics-block.html|access-date=7 March 2013}}</ref> जबकि पश्चात वाला केवल ब्लॉक डिवाइस बनाता है। लिनक्स में, डिस्क के लिए एक कैरेक्टर डिवाइस प्राप्त करने के लिए, कच्चे ड्राइवर का उपयोग करना चाहिए, हालांकि लिनक्स-विशिष्ट के साथ ब्लॉक डिवाइस को खोलकर एक कैरेक्टर डिवाइस को खोलने के समान प्रभाव प्राप्त कर सकते हैं। {{mono|O_DIRECT}} झंडा।
अधिकांश प्रणाली हार्ड डिस्क जैसे हार्डवेयर का प्रतिनिधित्व करने के लिए ब्लॉक और कैरेक्टर डिवाइस दोनों बनाते हैं। फ्रीबीएसडी और लिनक्स विशेष रूप से नहीं; पूर्व ने ब्लॉक उपकरणों के लिए विस्थापित कर दिया है,<ref>{{cite web|title=फ्रीबीएसडी आर्किटेक्चर हैंडबुक|url=http://www.freebsd.org/doc/en/books/arch-handbook/driverbasics-block.html|access-date=7 March 2013}}</ref> जबकि पश्चात वाले ने केवल ब्लॉक उपकरणों का निर्माण किया है। लिनक्स में, डिस्क के लिए कैरेक्टर डिवाइस प्राप्त करने के लिए, रॉ ड्राइवर का उपयोग करना चाहिए, चूँकि लिनक्स-विशिष्ट {{mono|O_DIRECT}} फ्लैग के साथ ब्लॉक डिवाइस को विवृत करके कैरेक्टर डिवाइस को विवृत करने के समान प्रभाव प्राप्त कर सकते हैं।


=== छद्म उपकरण ===
=== सूडो उपकरण ===
यूनिक्स जैसी प्रणालियों पर डिवाइस नोड्स को [[भौतिक उपकरण]]ों के अनुरूप होना जरूरी नहीं है। जिन नोड्स में इस पत्राचार की कमी है, वे छद्म उपकरणों का समूह बनाते हैं। वे ऑपरेटिंग प्रणाली द्वारा संचालित विभिन्न कार्य प्रदान करते हैं। सबसे अधिक इस्तेमाल किए जाने वाले कुछ (चरित्र-आधारित) छद्म-उपकरणों में शामिल हैं:
यूनिक्स जैसी प्रणालियों पर डिवाइस नोड्स को [[भौतिक उपकरण|भौतिक उपकरणों]] के अनुरूप होना आवश्यक नहीं है। जिन नोड्स में इस पत्राचार की कमी है, वे सूडो उपकरणों का समूह बनाते हैं। वे ऑपरेटिंग प्रणाली द्वारा संचालित विभिन्न कार्य प्रदान करते हैं। सबसे अधिक उपयोग किए जाने वाले कुछ (कैरेक्टर-आधारित) सूडो-उपकरणों में सम्मिलित हैं:


* {{mono|[[/dev/null]]}}{{snd}} इसमें लिखे गए सभी इनपुट को स्वीकार करता है और खारिज करता है; से पढ़ने पर फ़ाइल का अंत संकेत प्रदान करता है।
* {{mono|[[/dev/null]]}}{{snd}} इसमें लिखे गए सभी इनपुट को स्वीकार करता है और बहिष्कृत करता है; पढ़ने पर फ़ाइल का अंत संकेत प्रदान करता है।
* {{mono|[[/dev/zero]]}}{{snd}} इसमें लिखे गए सभी इनपुट को स्वीकार करता है और खारिज करता है; जब से पढ़ा जाता है तो आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की एक सतत धारा उत्पन्न करता है।
* {{mono|[[/dev/zero]]}}{{snd}} इसमें लिखे गए सभी इनपुट को स्वीकार करता है और बहिष्कृत करता है; जब से पढ़ा जाता है तो आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की सतत धारा उत्पन्न करता है।
* {{mono|[[/dev/full]]}}{{snd}} से पढ़ने पर आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की एक सतत धारा उत्पन्न करता है, और एक उत्पन्न करता है {{mono|[[errno.h|ENOSPC]]}} (डिस्क भर गई) त्रुटि जब इसमें लिखने का प्रयास किया गया।
* {{mono|[[/dev/full]]}}{{snd}} पढ़ने पर आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की सतत धारा उत्पन्न करता है, और इसे लिखने का प्रयास करते समय {{mono|[[errno.h|ENOSPC]]}} (डिस्क पूर्ण) त्रुटि उत्पन्न करता है।
* {{mono|[[/dev/random]]}}{{snd}} कर्नेल के [[क्रिप्टोग्राफिक रूप से सुरक्षित छद्म यादृच्छिक संख्या जनरेटर]] द्वारा उत्पन्न बाइट उत्पन्न करता है। इसका सटीक व्यवहार कार्यान्वयन से भिन्न होता है, और कभी-कभी भिन्न होता है जैसे {{mono|/dev/urandom}} या {{mono|/dev/arandom}} भी दिए गए हैं।
* {{mono|[[/dev/random]]}}{{snd}} कर्नेल के [[क्रिप्टोग्राफिक रूप से सुरक्षित छद्म यादृच्छिक संख्या जनरेटर|क्रिप्टोग्राफिक रूप से सुरक्षित सूडो यादृच्छिक संख्या जनरेटर]] द्वारा बाइट उत्पन्न करता है। इसका त्रुटिहीन व्यवहार कार्यान्वयन से भिन्न होता है, और कभी-कभी वेरिएंट जैसे {{mono|/dev/urandom}} या {{mono|/dev/arandom}} भी दिए गए हैं।
* {{mono|/dev/stdin}}, {{mono|/dev/stdout}}, {{mono|/dev/stderr}}{{snd}} प्रक्रिया की मानक धाराओं तक पहुंचें।
* {{mono|/dev/stdin}}, {{mono|/dev/stdout}}, {{mono|/dev/stderr}}{{snd}} प्रक्रिया के मानक स्ट्रीम तक पहुँचें।
* {{mono|/dev/fd/}}एन{{snd}} प्रक्रिया के [[फाइल डिस्क्रिप्टर]] n तक पहुँचता है।
* {{mono|/dev/fd/}}एन{{snd}} प्रक्रिया के [[फाइल डिस्क्रिप्टर]] n को एक्सेस करता है।


इसके अतिरिक्त, बीएसडी-विशिष्ट स्यूडो-डिवाइस a {{mono|[[ioctl]]}} इंटरफ़ेस में ये भी शामिल हो सकते हैं:
इसके अतिरिक्त, {{mono|[[ioctl]]}} इंटरफ़ेस वाले बीएसडी विशिष्ट सूडो उपकरणों में ये भी सम्मिलित हो सकते हैं:
* {{mono|[[/dev/pf]]}}{{snd}} उपयोगकर्ताभूमि प्रक्रियाओं को [[पीएफ (फ़ायरवॉल)]] को नियंत्रित करने की अनुमति देता है a {{mono|ioctl}} इंटरफेस।
* {{mono|[[/dev/pf]]}}{{snd}} {{mono|ioctl}} इंटरफेस के माध्यम से उपयोगकर्ता भूमि प्रक्रियाओं को [[पीएफ (फ़ायरवॉल)]] को नियंत्रित करने की अनुमति देता है   ।
* {{mono|[[/dev/bio]]}}{{snd}} प्रदान करता है {{mono|ioctl}} उपकरणों तक पहुंच अन्यथा नहीं मिली {{mono|/dev}} नोड्स, द्वारा उपयोग किया जाता है {{mono|[[bioctl]]}} [[OpenBSD]] और [[NetBSD]] में [[RAID]] प्रबंधन प्रारम्भ करने के लिए।
* {{mono|[[/dev/bio]]}}{{snd}} उपकरणों को {{mono|ioctl}} एक्सेस प्रदान करता है अन्यथा {{mono|/dev}} नोड्स, के रूप में नहीं मिलता है, जिसका उपयोग {{mono|[[bioctl]]}} द्वारा [[OpenBSD|ओपनबीएसडी]] और [[NetBSD|नेटबीएसडी]] में [[RAID|रेड]] प्रबंधन को प्रारम्भ करने के लिए किया जाता है।
* {{mono|[[/dev/sysmon]]}}{{snd}} [[सिस्टम मॉनिटर|प्रणाली मॉनिटर]] के लिए NetBSD के [[envsys]] फ्रेमवर्क द्वारा उपयोग किया जाता है, जिसके माध्यम से यूजरलैंड में एक्सेस किया जाता है {{mono|[[proplib(3)]]}} से {{mono|envstat}} उपयोगिता।<ref name=envstat>{{cite web |url= http://bxr.su/n/usr.sbin/envstat/envstat.c |title= usr.sbin/envstat/envstat.c |website= BSD Cross Reference |publisher= [[NetBSD]] |date=November 2021}}
* {{mono|[[/dev/sysmon]]}}{{snd}}हार्डवेयर निरीक्षण के लिए नेटबीएसडी के [[envsys]] फ्रेमवर्क द्वारा उपयोग किया जाता है, {{mono|envstat}} उपयोगिता द्वारा {{mono|[[proplib(3)]]}} के माध्यम से उपयोक्ता भूमि में पहुँचा जाता है।<ref name=envstat>{{cite web |url= http://bxr.su/n/usr.sbin/envstat/envstat.c |title= usr.sbin/envstat/envstat.c |website= BSD Cross Reference |publisher= [[NetBSD]] |date=November 2021}}
*{{cite book |section=envstat -- utility to handle environmental sensors |title=NetBSD System Manager's Manual |url= http://mdoc.su/n/envstat.8 |archive-url=https://web.archive.org/web/20190323041807/http://netbsd.gw.com/cgi-bin/man-cgi?envstat+8 |archive-date=2019-03-23}}</ref>
*{{cite book |section=envstat -- utility to handle environmental sensors |title=NetBSD System Manager's Manual |url= http://mdoc.su/n/envstat.8 |archive-url=https://web.archive.org/web/20190323041807/http://netbsd.gw.com/cgi-bin/man-cgi?envstat+8 |archive-date=2019-03-23}}</ref>


Line 53: Line 53:
द्वारा नोड बनाए जाते हैं {{mono|mknod}} प्रणाली कॉल। नोड बनाने के लिए कमांड-लाइन प्रोग्राम को भी कहा जाता है {{mono|mknod}}. सामान्य फाइलप्रणाली प्रणाली कॉल द्वारा नोड्स को स्थानांतरित या हटाया जा सकता है ({{mono|[[rename (computing)|rename]]}}, {{mono|[[unlink (Unix)|unlink]]}}) और [[कमांड (कंप्यूटिंग)]] ({{mono|[[mv (Unix)|mv]]}}, {{mono|[[rm (Unix)|rm]]}}).
द्वारा नोड बनाए जाते हैं {{mono|mknod}} प्रणाली कॉल। नोड बनाने के लिए कमांड-लाइन प्रोग्राम को भी कहा जाता है {{mono|mknod}}. सामान्य फाइलप्रणाली प्रणाली कॉल द्वारा नोड्स को स्थानांतरित या हटाया जा सकता है ({{mono|[[rename (computing)|rename]]}}, {{mono|[[unlink (Unix)|unlink]]}}) और [[कमांड (कंप्यूटिंग)]] ({{mono|[[mv (Unix)|mv]]}}, {{mono|[[rm (Unix)|rm]]}}).


कुछ यूनिक्स संस्करणों में निर्देशिका में सभी आवश्यक उपकरण बनाने के लिए Makedev या MAKEDEV नाम की एक स्क्रिप्ट शामिल है {{mono|/dev}}. यह केवल उन प्रणालियों पर समझ में आता है जिनके उपकरणों को स्थिर रूप से प्रमुख संख्याएँ सौंपी जाती हैं (उदाहरण के लिए, उनके कर्नेल मॉड्यूल में हार्डकोडिंग के माध्यम से)।
कुछ यूनिक्स संस्करणों में निर्देशिका में सभी आवश्यक उपकरण बनाने के लिए Makedev या MAKEDEV नाम की एक स्क्रिप्ट सम्मिलित है {{mono|/dev}}. यह केवल उन प्रणालियों पर समझ में आता है जिनके उपकरणों को स्थिर रूप से प्रमुख संख्याएँ सौंपी जाती हैं (उदाहरण के लिए, उनके कर्नेल मॉड्यूल में हार्डकोडिंग के माध्यम से)।


जबकि कुछ अन्य यूनिक्स प्रणाली जैसे कि FreeBSD, कर्नेल-आधारित डिवाइस नोड प्रबंधन का उपयोग केवल devfs के माध्यम से करते हैं, और मैन्युअल नोड निर्माण का समर्थन नहीं करते हैं। {{mono|mknod(2)}} प्रणाली कॉल और {{mono|mknod(8)}} कमांड POSIX के साथ संगतता बनाए रखने के लिए उपस्थित है, किंतु devfs के बाहर मैन्युअल रूप से बनाए गए डिवाइस नोड काम नहीं करेंगे।<ref>{{cite web |title=mknod(8) |url=https://www.freebsd.org/cgi/man.cgi?query=mknod&apropos=0&sektion=8&manpath=FreeBSD+13.0-RELEASE&arch=default&format=html |website=FreeBSD Manual Pages |publisher=The FreeBSD Project |access-date=2021-06-12 |date=2016-10-03}}</ref>
जबकि कुछ अन्य यूनिक्स प्रणाली जैसे कि FreeBSD, कर्नेल-आधारित डिवाइस नोड प्रबंधन का उपयोग केवल devfs के माध्यम से करते हैं, और मैन्युअल नोड निर्माण का समर्थन नहीं करते हैं। {{mono|mknod(2)}} प्रणाली कॉल और {{mono|mknod(8)}} कमांड POSIX के साथ संगतता बनाए रखने के लिए उपस्थित है, किंतु devfs के बाहर मैन्युअल रूप से बनाए गए डिवाइस नोड काम नहीं करेंगे।<ref>{{cite web |title=mknod(8) |url=https://www.freebsd.org/cgi/man.cgi?query=mknod&apropos=0&sektion=8&manpath=FreeBSD+13.0-RELEASE&arch=default&format=html |website=FreeBSD Manual Pages |publisher=The FreeBSD Project |access-date=2021-06-12 |date=2016-10-03}}</ref>
Line 68: Line 68:


* {{mono|fb}}: [[फ्रेम बफर]]
* {{mono|fb}}: [[फ्रेम बफर]]
* {{mono|fd}}: (प्लेटफ़ॉर्म) [[फ्लॉपी डिस्क]], हालांकि इसी संक्षिप्त नाम का इस्तेमाल सामान्यतः फ़ाइल डिस्क्रिप्टर को संदर्भित करने के लिए भी किया जाता है
* {{mono|fd}}: (प्लेटफ़ॉर्म) [[फ्लॉपी डिस्क]], चूँकि इसी संक्षिप्त नाम का उपयोग सामान्यतः फ़ाइल डिस्क्रिप्टर को संदर्भित करने के लिए भी किया जाता है
* {{mono|hd}}: (क्लासिक) [[ एकीकृत ड्राइव इलेक्ट्रॉनिक्स ]] ड्राइवर (पहले ATA [[हार्ड डिस्क ड्राइव]], ATAPI [[ऑप्टिकल डिस्क ड्राइव]], आदि के लिए उपयोग किया जाता था)
* {{mono|hd}}: (क्लासिक) [[ एकीकृत ड्राइव इलेक्ट्रॉनिक्स ]] ड्राइवर (पहले ATA [[हार्ड डिस्क ड्राइव]], ATAPI [[ऑप्टिकल डिस्क ड्राइव]], आदि के लिए उपयोग किया जाता था)
** {{mono|hda}}: पहले [[एटीए चैनल]] पर मास्टर डिवाइस (सामान्यतः प्रमुख संख्या 3 और छोटी संख्या 0 द्वारा पहचाना जाता है)
** {{mono|hda}}: पहले [[एटीए चैनल]] पर मास्टर डिवाइस (सामान्यतः प्रमुख संख्या 3 और छोटी संख्या 0 द्वारा पहचाना जाता है)

Revision as of 10:50, 14 June 2023

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

अवलोकन

डिवाइस फ़ाइलें सामान्यतः मानक उपकरणों (जैसे प्रिंटर और सीरियल पोर्ट) के लिए सरल इंटरफेस प्रदान करती हैं, किंतु उन उपकरणों पर विशिष्ट अद्वितीय संसाधनों तक पहुंचने के लिए भी उपयोग की जा सकती हैं, जैसे कि डिस्क विभाजन हैं। इसके अतिरिक्त, डिवाइस फ़ाइलें उन प्रणाली संसाधनों (कंप्यूटर विज्ञान) तक पहुँचने के लिए उपयोगी होती हैं जिनका किसी वास्तविक उपकरण से कोई संबंध नहीं होता है, जैसे डेटा सिंक और यादृच्छिक संख्या जनरेटर है।

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

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

कुछ यूनिक्स जैसी प्रणालियों में, अधिकांश डिवाइस फ़ाइलों को वर्चुअल फाइल प्रणाली के भाग के रूप में प्रबंधित किया जाता है जो परंपरागत रूप से /dev, पर आरोहित होता है, संभवतः नियंत्रित डेमॉन से जुड़ा हुआ है, जो रन टाइम पर हार्डवेयर जोड़ने और विस्थापित करने का निरीक्षण करता है, डिवाइस फ़ाइल प्रणाली में संबंधित परिवर्तन करता है यदि यह स्वचालित रूप से कर्नेल द्वारा नहीं किया जाता है, और संभवतः विशेष डिवाइस की आवश्यकताओं को पूर्ण करने के लिए प्रणाली या उपयोगकर्ता स्थान में स्क्रिप्ट को प्रारम्भ करता है। फ्रीबीएसडी, ड्रेगनफ्लाईबीएसडी और डार्विन (ऑपरेटिंग प्रणाली) के पास समर्पित फ़ाइल प्रणाली devfs है; इस फाइल प्रणाली द्वारा कर्नेल स्थान में डिवाइस नोड्स को स्वचालित रूप से प्रबंधित किया जाता है। लिनक्स में एक समान devfs कार्यान्वयन हुआ करता था, किंतु पश्चात में इसे छोड़ दिया गया, और फिर संस्करण 2.6.17 के पश्चात से विस्थापित कर दिया गया;[2] लिनक्स अब मुख्य रूप से उपयोगकर्ता स्थान कार्यान्वयन का उपयोग करता है जिसे udev के रूप में जाना जाता है, किंतु इसके कई संस्करण हैं।

यूनिक्स प्रणाली में जो क्रोट प्रक्रिया भिन्नता का समर्थन करता है, जैसे कि सोलारिस कंटेनर, सामान्यतः प्रत्येक क्रोट वातावरण को स्वयं /devकी आवश्यकता होती है; ये आरोह बिंदु वैश्विक फ़ाइल प्रणाली ट्री में विभिन्न नोड्स पर होस्ट ओएस पर दिखाई देंगे। /dev के क्रोट पॉप्युलेट किए गए डिवाइस नोड्स को प्रतिबंधित करके, हार्डवेयर भिन्नता को क्रोट वातावरण द्वारा प्रारम्भ किया जा सकता है (प्रोग्राम हार्डवेयर के साथ हस्तक्षेप नहीं कर सकता है जिसे वह न तो देख सकता है और न ही नाम दे सकता है- यूनिक्स फ़ाइल प्रणाली अनुमतियों की तुलना में अभिगम नियंत्रण का एक और भी स्थिर रूप)।

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


यूनिक्स और यूनिक्स जैसी प्रणालियाँ

लिनक्स कर्नेल की एक सरलीकृत संरचना। फाइल प्रणाली I/O सबप्रणाली के भाग के रूप में कार्यान्वित किए जाते हैं।

डिवाइस नोड्स उन संसाधनों के अनुरूप होते हैं जो ऑपरेटिंग प्रणाली के कर्नेल (कंप्यूटर साइंस) ने पहले ही आवंटित कर दिए हैं। यूनिक्स उन संसाधनों की प्रमुख संख्या और छोटी संख्या द्वारा पहचान करता है,[4] दोनों नोड (कंप्यूटर विज्ञान) की संरचना के भाग के रूप में संग्रहीत हैं। इन नंबरों का असाइनमेंट भिन्न-भिन्न ऑपरेटिंग प्रणाली और भिन्न-भिन्न कंप्यूटर प्लेटफॉर्म पर विशिष्ट रूप से होता है। सामान्यतः, प्रमुख संख्या डिवाइस ड्राइवर की पहचान करती है और छोटी संख्या विशेष डिवाइस (संभवतः कई में से) की पहचान करती है जिसे ड्राइवर नियंत्रित करता है:[5] इस स्थिति में, प्रणाली ड्राइवर को माइनर नंबर दे सकता है। चूँकि, डायनेमिक नंबर आवंटन की उपस्थिति में, यह विषय नहीं हो सकता है (उदाहरण के लिए फ्रीबीएसडी 5 और ऊपर)।

अन्य विशेष फ़ाइल प्रकारों के जैसे, कंप्यूटर प्रणाली मानक प्रणाली कॉल का उपयोग करके डिवाइस नोड्स तक पहुँचता है और उन्हें नियमित कंप्यूटर फ़ाइलों के जैसे व्यवहार करता है। दो मानक प्रकार की डिवाइस फ़ाइलें उपस्थित हैं; दुर्भाग्य से उनके नाम ऐतिहासिक कारणों से प्रति-सहज हैं, और परिणामस्वरूप दोनों के मध्य अंतर की व्याख्या प्रायः त्रुटिपूर्ण होती है।

वर्ण उपकरण

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

करैक्टर उपकरणों को कभी-कभी रॉ उपकरणों के रूप में जाना जाता है जिससे इस तथ्य के निकट के भ्रम से बचा जा सके कि ब्लॉक-आधारित हार्डवेयर के टुकड़े के लिए करैक्टर डिवाइस को सामान्यतः संरेखित ब्लॉकों को पढ़ने और लिखने के लिए प्रोग्राम की आवश्यकता होगी।

ब्लॉक डिवाइस

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

अधिकांश प्रणाली हार्ड डिस्क जैसे हार्डवेयर का प्रतिनिधित्व करने के लिए ब्लॉक और कैरेक्टर डिवाइस दोनों बनाते हैं। फ्रीबीएसडी और लिनक्स विशेष रूप से नहीं; पूर्व ने ब्लॉक उपकरणों के लिए विस्थापित कर दिया है,[7] जबकि पश्चात वाले ने केवल ब्लॉक उपकरणों का निर्माण किया है। लिनक्स में, डिस्क के लिए कैरेक्टर डिवाइस प्राप्त करने के लिए, रॉ ड्राइवर का उपयोग करना चाहिए, चूँकि लिनक्स-विशिष्ट O_DIRECT फ्लैग के साथ ब्लॉक डिवाइस को विवृत करके कैरेक्टर डिवाइस को विवृत करने के समान प्रभाव प्राप्त कर सकते हैं।

सूडो उपकरण

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

  • /dev/null – इसमें लिखे गए सभी इनपुट को स्वीकार करता है और बहिष्कृत करता है; पढ़ने पर फ़ाइल का अंत संकेत प्रदान करता है।
  • /dev/zero – इसमें लिखे गए सभी इनपुट को स्वीकार करता है और बहिष्कृत करता है; जब से पढ़ा जाता है तो आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की सतत धारा उत्पन्न करता है।
  • /dev/full – पढ़ने पर आउटपुट के रूप में अशक्त वर्णों (शून्य-मान बाइट्स) की सतत धारा उत्पन्न करता है, और इसे लिखने का प्रयास करते समय ENOSPC (डिस्क पूर्ण) त्रुटि उत्पन्न करता है।
  • /dev/random – कर्नेल के क्रिप्टोग्राफिक रूप से सुरक्षित सूडो यादृच्छिक संख्या जनरेटर द्वारा बाइट उत्पन्न करता है। इसका त्रुटिहीन व्यवहार कार्यान्वयन से भिन्न होता है, और कभी-कभी वेरिएंट जैसे /dev/urandom या /dev/arandom भी दिए गए हैं।
  • /dev/stdin, /dev/stdout, /dev/stderr – प्रक्रिया के मानक स्ट्रीम तक पहुँचें।
  • /dev/fd/एन – प्रक्रिया के फाइल डिस्क्रिप्टर n को एक्सेस करता है।

इसके अतिरिक्त, ioctl इंटरफ़ेस वाले बीएसडी विशिष्ट सूडो उपकरणों में ये भी सम्मिलित हो सकते हैं:

  • /dev/pf – ioctl इंटरफेस के माध्यम से उपयोगकर्ता भूमि प्रक्रियाओं को पीएफ (फ़ायरवॉल) को नियंत्रित करने की अनुमति देता है ।
  • /dev/bio – उपकरणों को ioctl एक्सेस प्रदान करता है अन्यथा /dev नोड्स, के रूप में नहीं मिलता है, जिसका उपयोग bioctl द्वारा ओपनबीएसडी और नेटबीएसडी में रेड प्रबंधन को प्रारम्भ करने के लिए किया जाता है।
  • /dev/sysmon – हार्डवेयर निरीक्षण के लिए नेटबीएसडी के envsys फ्रेमवर्क द्वारा उपयोग किया जाता है, envstat उपयोगिता द्वारा proplib(3) के माध्यम से उपयोक्ता भूमि में पहुँचा जाता है।[8]


नोड निर्माण

द्वारा नोड बनाए जाते हैं mknod प्रणाली कॉल। नोड बनाने के लिए कमांड-लाइन प्रोग्राम को भी कहा जाता है mknod. सामान्य फाइलप्रणाली प्रणाली कॉल द्वारा नोड्स को स्थानांतरित या हटाया जा सकता है (rename, unlink) और कमांड (कंप्यूटिंग) (mv,