(लगभग) सब कुछ एक फ़ाइल है लेकिन सब कुछ एक नियमित फ़ाइल नहीं है। यह एक ऐसी चीज़ पर एक पाठ संपादक को कॉल करने के लिए समझ में नहीं आता है जो एक विशेष फ़ाइल है जैसे कि एक निर्देशिका, एक नेटवर्क सॉकेट, एक सीरियल पोर्ट आदि।
फ़ाइल /dev/stdoutयूनिक्स संस्करण के अनुसार कई चीजों में से एक हो सकता है:
- एक "विशेष" फ़ाइल, आमतौर पर एक चरित्र डिवाइस;
- एक "मैजिक" प्रतीकात्मक लिंक जो उस फ़ाइल को इंगित करता है जिसे एक्सेस करने की प्रक्रिया इस डिस्क्रिप्टर पर खुली है;
- उपरोक्त में से एक के लिए एक प्रतीकात्मक लिंक।
किसी भी मामले में, खोलने /dev/stdoutऔर इसी तरह की फाइलें एक नई फाइल डिस्क्रिप्टर बनाती हैं जो उसी फाइल से जुड़ी होती हैं जो एप्लिकेशन पहले से फाइल डिस्क्रिप्टर 1 पर खुली होती है। "स्टैंडर्ड आउटपुट" का अर्थ है फाइल डिस्क्रिप्टर 1, और यह केवल एक कन्वेंशन है जो इस फाइल डिस्क्रिप्टर का उपयोग किया जाता है। आउटपुट के लिए - कर्नेल परवाह नहीं करता है।
जब आप किसी टर्मिनल में प्रोग्राम चलाते हैं, तो टर्मिनल डिवाइस पर सभी तीन मानक डिस्क्रिप्टर (0 = मानक इनपुट, 1 = मानक आउटपुट, 2 = मानक त्रुटि) खोले जाते हैं। उस डिवाइस से पढ़ना उपयोगकर्ता द्वारा टाइप किए गए वर्ण देता है, और उस डिवाइस पर लिखना टर्मिनल विंडो में पाठ प्रदर्शित करता है। (कोई मानक तरीका नहीं है, एक टर्मिनल डिवाइस दिया गया है, आउटपुट को पढ़ने के लिए जिसे वह प्रदर्शित करता है या इसमें इनपुट इंजेक्ट करता है।)
जब आप दौड़ते हैं cat /dev/stdout, तो यह ठीक वैसा ही काम करता है जैसे cat /dev/stdinया cat /dev/stderr, क्योंकि ये तीनों फाइल डिस्क्रिप्टर एक ही फाइल से जुड़े होते हैं: यह catटर्मिनल से पढ़ना बताता है। catबिना किसी तर्क के भी यही होता है।
यदि आप भागते हैं cat /dev/stdout >foo, तो /dev/stdoutफ़ाइल को संदर्भित करेगा foo- वह कमांड के बराबर है cat foo >foo। catकार्यान्वयन के आधार पर , यह या तो त्रुटि हो सकती है (GNU संस्करण शिकायत करता है कि "इनपुट फ़ाइल आउटपुट फ़ाइल है"), या यह कुछ नहीं कर सकता क्योंकि यह फ़ाइल से पढ़ता है fooजो खाली है ( >fooबस इसे काट दिया गया है)। catउस संस्करण के साथ यह विशेष मामले का पता नहीं लगाता है, यदि fooखाली नहीं है, तो cat /dev/stdout >>fooया समतुल्य cat foo >>fooफ़ाइल की सामग्री को अनिश्चित काल के लिए खुद को जोड़ देगा।
जब आप दौड़ते हैं vim /dev/stdout, तो यह शिकायत करता है क्योंकि यह नहीं जानता कि टर्मिनल को कैसे संपादित किया जाए (इसका मतलब यह नहीं है)।