फ़ाइल डिस्क्रिप्टर क्या है?

एक फाइल डिस्क्रिप्टर एक संख्या है जो विशिष्ट रूप से कंप्यूटर के ऑपरेटिंग सिस्टम में एक खुली फ़ाइल की पहचान करती है। यह एक डेटा संसाधन का वर्णन करता है, और उस संसाधन तक कैसे पहुँचा जा सकता है।

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

विवरणक की पहचान एक अद्वितीय गैर-नकारात्मक पूर्णांक, जैसे 0, 12, या 567 द्वारा की जाती है । सिस्टम पर प्रत्येक खुली फ़ाइल के लिए कम से कम एक फ़ाइल डिस्क्रिप्टर मौजूद है।

फ़ाइल डिस्क्रिप्टर पहले यूनिक्स में उपयोग किए गए थे, और लिनक्स, मैकओएस एक्स और बीएसडी सहित आधुनिक ऑपरेटिंग सिस्टम द्वारा उपयोग किए जाते हैं। Microsoft Windows में, फ़ाइल डिस्क्रिप्टर को फ़ाइल हैंडल के रूप में जाना जाता है।

  • अवलोकन
  • स्टडिन, स्टडआउट, और स्टेडर
  • फ़ाइल विवरणकर्ताओं को पुनर्निर्देशित करना

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

स्टडिन, स्टडआउट, और स्टेडर

यूनिक्स जैसी ऑपरेटिंग सिस्टम पर, पहले तीन फ़ाइल डिस्क्रिप्टर, डिफ़ॉल्ट रूप से, STDIN (मानक इनपुट), STDOUT (मानक आउटपुट), और STDERR (मानक त्रुटि) हैं।

नामफ़ाइल विवरणकविवरणसंक्षिप्त
मानक इनपुट0इनपुट के लिए डिफ़ॉल्ट डेटा स्ट्रीम, उदाहरण के लिए एक कमांड पाइपलाइन में। टर्मिनल में, यह उपयोगकर्ता से कीबोर्ड इनपुट के लिए चूक करता है।stdin
मानक उत्पादन1आउटपुट के लिए डिफ़ॉल्ट डेटा स्ट्रीम, उदाहरण के लिए जब कोई कमांड टेक्स्ट प्रिंट करता है। टर्मिनल में, यह उपयोगकर्ता की स्क्रीन को डिफॉल्ट करता है।stdout
मानक त्रुटि2आउटपुट के लिए डिफ़ॉल्ट डेटा स्ट्रीम जो कि होने वाली त्रुटि से संबंधित है। टर्मिनल में, यह उपयोगकर्ता की स्क्रीन को डिफॉल्ट करता है।stderr

फ़ाइल विवरणकर्ताओं को पुनर्निर्देशित करना

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

उदाहरण के लिए, जब आप खोज कमांड का उपयोग करते हैं, तो सफल आउटपुट stdout (फ़ाइल डिस्क्रिप्टर 1 ) में चला जाता है, और त्रुटि संदेश stderr (फाइल डिस्क्रिप्टर 2 ) पर जाता है। दोनों धाराएँ टर्मिनल आउटपुट के रूप में प्रदर्शित होती हैं:

 खोजें / -नाम '* कुछ *' 
 / usr / share / doc / something / usr / share / doc / कुछ / उदाहरण / कुछ_आक्रमी खोज: `/ रन / udisks2 ': अनुमति से इनकार करते हैं:` / रन / wpa_supplicant: अनुमति अस्वीकृत / usr / शेयर / कुछ / usr / / खेल / कुछ 

हमें त्रुटियां हो रही हैं क्योंकि खोज कुछ सिस्टम निर्देशिकाओं को खोजने की कोशिश कर रही है जिन्हें हमें पढ़ने की अनुमति नहीं है। सभी लाइनें जो "अनुमति से इनकार करती हैं" कहती हैं, उन्हें stderr को लिखा गया था, और अन्य पंक्तियों को stdout को लिखा गया था।

आप फ़ाइल डिस्क्रिप्टर 2 / dev / null में फ़ाइल पुनर्निर्देशक द्वारा stderr छिपा सकते हैं, लिनक्स में विशेष उपकरण जो "कहीं नहीं जाता है":

 / / -नाम '* कुछ * 2> / देव / अशक्त खोजें 
 / usr / शेयर / डॉक्टर / कुछ / usr / शेयर / डॉक्टर / कुछ / उदाहरण / कुछ_ग्राम / usr / शेयर / कुछ / usr / खेल / कुछ 

त्रुटियों को / dev / null में भेज दिया गया है, और प्रदर्शित नहीं किया गया है।

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

 find / -name '* * something *' | grep 'कुछ' 
 / usr / share / doc / something / usr / share / doc / कुछ / उदाहरण / कुछ_आदेश: run / खेल / कुछ 

हालाँकि, आप मानक त्रुटि को मानक आउटपुट पर पुनर्निर्देशित कर सकते हैं, और फिर grep दोनों के पाठ को संसाधित करेगा:

 find / -name '* * something *' 2> & 1 | grep 'कुछ' 
 / usr / शेयर / डॉक्टर / कुछ / usr / शेयर / डॉक्टर / कुछ / उदाहरण / कुछ_ग्राम / usr / शेयर / कुछ / usr / खेल / कुछ 

ध्यान दें कि ऊपर दिए गए कमांड में, लक्ष्य फ़ाइल विवरणक ( 1 ) एक एम्परसेंड (" और ") के साथ उपसर्ग किया गया है। डेटा स्ट्रीम पुनर्निर्देशन के बारे में अधिक जानकारी के लिए, बैश शेल में पाइपलाइन देखें।

बैश में फ़ाइल डिस्क्रिप्टर बनाने और उपयोग करने के उदाहरणों के लिए, हमारे निष्पादन बिलिन कमांड उदाहरण देखें।

फ़ाइल हैंडल, ऑपरेटिंग सिस्टम शब्द