मुझे डर है कि आपकी समझ पूरी तरह से पीछे है। :)
प्रोग्राम के दृष्टिकोण से "मानक", "मानक आउट" और "मानक त्रुटि" के बारे में सोचें , न कि कर्नेल के दृष्टिकोण से।
जब किसी प्रोग्राम को आउटपुट प्रिंट करने की आवश्यकता होती है, तो यह आम तौर पर "मानक आउट" प्रिंट करता है। एक प्रोग्राम आम तौर पर आउटपुट को मानक से printf
प्रिंट करता है, जो केवल मानक से बाहर प्रिंट करता है।
जब किसी प्रोग्राम को त्रुटि जानकारी प्रिंट करने की आवश्यकता होती है (आवश्यक रूप से अपवाद नहीं, तो वे प्रोग्रामिंग-भाषा के निर्माण होते हैं, बहुत उच्च स्तर पर लगाए जाते हैं), यह सामान्य रूप से "मानक त्रुटि" को प्रिंट करता है। यह सामान्य रूप से ऐसा करता है fprintf
, जो मुद्रण करते समय उपयोग करने के लिए एक फ़ाइल स्ट्रीम स्वीकार करता है। मानक बाहर, मानक त्रुटि, या किसी अन्य फ़ाइल उस के साथ खोल दिया गया है: फ़ाइल धारा लिखने के लिए खोला किसी भी फाइल हो सकता है fopen
या fdopen
।
"मानक" का उपयोग तब किया जाता है जब फ़ाइल को इनपुट, उपयोग fread
या fgets
, पढ़ने की आवश्यकता होती है getchar
।
इनमें से कोई भी फाइल शेल से आसानी से पुनर्निर्देशित की जा सकती है , जैसे:
cat /etc/passwd > /tmp/out # redirect cat's standard out to /tmp/foo
cat /nonexistant 2> /tmp/err # redirect cat's standard error to /tmp/error
cat < /etc/passwd # redirect cat's standard input to /etc/passwd
या, पूरा एंचिलाड़ा:
cat < /etc/passwd > /tmp/out 2> /tmp/err
दो महत्वपूर्ण चेतावनी हैं: पहला, "मानक", "मानक आउट" और "मानक त्रुटि" केवल एक सम्मेलन है। वे एक बहुत मजबूत सम्मेलन हैं, लेकिन यह सब सिर्फ एक समझौता है कि इस तरह से कार्यक्रम चलाने में सक्षम होना बहुत अच्छा है: grep echo /etc/services | awk '{print $2;}' | sort
और पाइपलाइन में अगले कार्यक्रम के मानक इनपुट में झुके हुए प्रत्येक कार्यक्रम के मानक आउटपुट हैं।
दूसरा, मैंने फ़ाइल धाराओं ( FILE *
ऑब्जेक्ट्स) के साथ काम करने के लिए मानक ISO C फ़ंक्शंस दिए हैं - कर्नेल स्तर पर, यह सभी फ़ाइल डिस्क्रिप्टर ( int
फ़ाइल टेबल के संदर्भ) और जैसे read
और निचले स्तर के ऑपरेशन हैं write
, जो नहीं करते हैं आईएसओ सी कार्यों के खुश बफ़रिंग करते हैं। मुझे लगा कि इसे सरल रखना है और आसान कार्यों का उपयोग करना है, लेकिन मैंने सोचा कि आप सभी को विकल्प जानना चाहिए। :)