मानक विधा (स्टैंडर्ड स्ट्रीम्स)

कंप्यूटर प्रोग्रामिंग में, मानक धाराएँ परस्पर जुड़े हुए इनपुट और आउटपुट संचार चैनल हैं एक कंप्यूटर प्रोग्राम और उसके वातावरण के बीच जब यह निष्पादन शुरू होता है। तीन इनपुट/आउटपुट (I/O) कनेक्शन मानक इनपुट (stdin), मानक आउटपुट (stdout) और मानक त्रुटि (stderr) कहलाते हैं। मूल रूप से I/O भौतिक रूप से जुड़े सिस्टम कंसोल (कीबोर्ड के माध्यम से इनपुट, मॉनीटर के माध्यम से आउटपुट) के माध्यम से हुआ, लेकिन मानक धाराएं इसे सार करती हैं। जब एक इंटरएक्टिव शैल (कंप्यूटिंग)  के माध्यम से एक कमांड निष्पादित किया जाता है, तो धाराएं आमतौर पर  पाठ टर्मिनल  से जुड़ी होती हैं, जिस पर शेल चल रहा होता है, लेकिन इसे  पुनर्निर्देशन (कंप्यूटिंग)  या एक पाइपलाइन (यूनिक्स) के साथ बदला जा सकता है। अधिक आम तौर पर, एक बाल प्रक्रिया अपनी मूल प्रक्रिया की मानक धाराओं को प्राप्त करती है।

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

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

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

यूनिक्स के कई महत्वपूर्ण अग्रिमों में से एक अमूर्त डिवाइस था, जिसने प्रोग्राम को यह जानने या देखभाल करने की आवश्यकता को हटा दिया कि यह किस प्रकार के उपकरणों के साथ संचार कर रहा था।. पुराने ऑपरेटिंग सिस्टम ने प्रोग्रामर पर एक रिकॉर्ड संरचना और अक्सर ऑर्थोगोनल#कंप्यूटर विज्ञान|गैर-ऑर्थोगोनल डेटा सिमेंटिक्स और डिवाइस नियंत्रण को मजबूर किया। यूनिक्स ने डेटा स्ट्रीम की अवधारणा के साथ इस जटिलता को समाप्त कर दिया: डेटा बाइट्स का एक क्रमबद्ध क्रम जिसे फ़ाइल के अंत तक पढ़ा जा सकता है। एक प्रोग्राम वांछित के रूप में बाइट भी लिख सकता है और इसकी आवश्यकता नहीं है, और आसानी से उनकी गिनती या समूहीकरण घोषित नहीं कर सकता है।

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

चूंकि यूनिक्स ने मानक धाराएं प्रदान की हैं, इसलिए यूनिक्स सी (प्रोग्रामिंग भाषा) रनटाइम वातावरण भी इसका समर्थन करने के लिए बाध्य था। नतीजतन, अधिकांश सी रनटाइम वातावरण (और सी (प्रोग्रामिंग भाषा)#संबंधित भाषाएं|सी के वंश), ऑपरेटिंग सिस्टम की परवाह किए बिना, समकक्ष कार्यक्षमता प्रदान करते हैं।

मानक इनपुट (stdin)
मानक इनपुट एक स्ट्रीम है जिससे एक प्रोग्राम अपने इनपुट डेटा को पढ़ता है। प्रोग्राम रीड ऑपरेशन के उपयोग से डेटा ट्रांसफर का अनुरोध करता है। सभी प्रोग्रामों को स्ट्रीम इनपुट की आवश्यकता नहीं होती है। उदाहरण के लिए, dir (कमांड) और ls प्रोग्राम (जो एक निर्देशिका में निहित फ़ाइल नाम प्रदर्शित करते हैं) कमांड-लाइन इंटरफ़ेस#Arguments|कमांड-लाइन तर्क ले सकते हैं, लेकिन बिना किसी स्ट्रीम डेटा इनपुट के अपना संचालन करते हैं।

जब तक पुनर्निर्देशन (कंप्यूटिंग), मानक इनपुट मूल प्रक्रिया से विरासत में नहीं मिलता है। इंटरएक्टिव शेल के मामले में, जो आमतौर पर कीबोर्ड (कंप्यूटिंग) से जुड़ा होता है।

मानक इनपुट के लिए फाइल डिस्क्रिप्टर 0 (शून्य) है; पॉज़िक्स  परिभाषा है  ; संबंधित सी   चर है  ; इसी तरह, सी ++   चर है.

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

जब तक पुनर्निर्देशन (यूनिक्स)  न हो, मानक आउटपुट मूल प्रक्रिया से प्राप्त होता है। इंटरएक्टिव शेल के मामले में, वह आमतौर पर टेक्स्ट टर्मिनल होता है जिसने प्रोग्राम को शुरू किया।

मानक आउटपुट के लिए फाइल डिस्क्रिप्टर 1 (एक) है; पॉज़िक्स  परिभाषा है  ; संबंधित सी   चर है  ; इसी तरह, सी ++   चर है.

मानक त्रुटि (stderr)
मानक त्रुटि एक अन्य आउटपुट स्ट्रीम है जो आमतौर पर प्रोग्राम द्वारा आउटपुट त्रुटि संदेश या डायग्नोस्टिक्स के लिए उपयोग की जाती है। यह मानक आउटपुट से स्वतंत्र एक स्ट्रीम है और इसे अलग से पुनर्निर्देशित किया जा सकता है।

यह अर्ध-विधेय समस्या को हल करता है। अर्ध-विधेय समस्या, आउटपुट और त्रुटियों को अलग करने की इजाजत देता है, और मूल्यों की एक जोड़ी लौटने वाले फ़ंक्शन के समान होता है - सेमीप्रिडिकेट समस्या # मल्टीवैल्यूड रिटर्न | अर्ध-विधेय समस्या देखें: बहु मूल्यवान वापसी। सामान्य गंतव्य पाठ टर्मिनल है जिसने मानक आउटपुट पुनर्निर्देशित होने पर भी देखे जाने का सबसे अच्छा मौका प्रदान करने के लिए कार्यक्रम शुरू किया (इसलिए आसानी से नहीं देखा गया)। उदाहरण के लिए, एक पाइपलाइन (यूनिक्स) में एक प्रोग्राम का आउटपुट अगले प्रोग्राम या एक टेक्स्ट फ़ाइल के इनपुट पर पुनर्निर्देशित किया जाता है, लेकिन प्रत्येक प्रोग्राम की त्रुटियां अभी भी सीधे टेक्स्ट टर्मिनल में जाती हैं ताकि वास्तविक समय में उपयोगकर्ता द्वारा उनकी समीक्षा की जा सके। मानक आउटपुट और मानक त्रुटि को एक ही गंतव्य पर निर्देशित करना स्वीकार्य और सामान्य है, जैसे टेक्स्ट टर्मिनल। संदेश उसी क्रम में दिखाई देते हैं जैसे प्रोग्राम उन्हें लिखता है, जब तक कि डेटा बफ़र शामिल न हो। उदाहरण के लिए, सामान्य स्थितियों में मानक त्रुटि धारा अप्रभावित होती है लेकिन मानक आउटपुट धारा रेखा-बफर होती है; इस मामले में, मानक त्रुटि के लिए लिखा गया पाठ बाद में टर्मिनल पर पहले दिखाई दे सकता है, यदि मानक आउटपुट स्ट्रीम बफर अभी तक भरा नहीं है।

मानक त्रुटि के लिए फाइल डिस्क्रिप्टर को POSIX द्वारा 2 (दो) के रूप में परिभाषित किया गया है;  हेडर फ़ाइल प्रतीक प्रदान करती है ; संबंधित सी   चर है. सी ++  मानक हेडर इस स्ट्रीम से जुड़े दो चर प्रदान करता है:   और , पूर्व को अप्रभावित किया जा रहा है और बाद में उसी बफ़रिंग तंत्र का उपयोग किया जा रहा है जैसा कि अन्य सभी C++ स्ट्रीम में होता है।

बॉर्न शेल-शैली के गोले मानक त्रुटि को उसी गंतव्य पर पुनर्निर्देशित करने की अनुमति देते हैं जो मानक आउटपुट को उपयोग करने के लिए निर्देशित किया जाता है 2>और 1

सी खोल -शैली के गोले मानक त्रुटि को उसी गंतव्य पर पुनर्निर्देशित करने की अनुमति देते हैं जो मानक आउटपुट का उपयोग करने के लिए निर्देशित किया जाता है >&

1970 के दशक में यूनिक्स में मानक त्रुटि जोड़ी गई थी, जब उपयोगकर्ता के टर्मिनल पर प्रदर्शित होने के बजाय टाइपसेट होने वाले त्रुटि संदेशों के साथ कई व्यर्थ फोटोटाइपसेटिंग रन समाप्त हो गए।

1950 का दशक: फोरट्रान
फोरट्रान के पास यूनिक्स फाइल डिस्क्रिप्टर के बराबर है: परंपरा के अनुसार, कई फोरट्रान कार्यान्वयन इकाई संख्या का उपयोग करते हैं  for stdin,   for stdout and   for stderr. In Fortran-2003, the intrinsic  मॉड्यूल नामित स्थिरांक शामिल करने के लिए मानकीकृत किया गया था ,  , और   यूनिट नंबरों को पोर्टेबल रूप से निर्दिष्ट करने के लिए।

1960: एल्गोल 60
ALGOL 60 की कोई मानक फ़ाइल एक्सेस न होने के कारण आलोचना की गई थी।

1968: एल्गोल 68
ALGOL 68 की इनपुट और आउटपुट सुविधाओं को सामूहिक रूप से ट्रांसपुट कहा जाता था। कॉर्नेलिस एच। ए। कोस्टर ने ट्रांसपुट मानक की परिभाषा का समन्वय किया। मॉडल में तीन मानक चैनल शामिल थे:,  , और.

1970 का दशक: सी और यूनिक्स
सी प्रोग्रामिंग भाषा में, मानक इनपुट, आउटपुट और एरर स्ट्रीम क्रमशः मौजूदा यूनिक्स फाइल डिस्क्रिप्टर 0, 1 और 2 से जुड़े होते हैं। POSIX वातावरण में जादू संख्या (प्रोग्रामिंग)  के बजाय  परिभाषाओं STDIN_FILENO, STDOUT_FILENO या STDERR_FILENO का उपयोग किया जाना चाहिए। फाइल पॉइंटर्स स्टडिन, स्टडआउट और स्टेडर भी प्रदान किए जाते हैं।

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

1995: जावा
जावा (प्रोग्रामिंग भाषा) में, मानक धाराओं को किसके द्वारा संदर्भित किया जाता है  (stdin के लिए),  (स्टडआउट के लिए), और   (stderr के लिए)।

2000 का दशक: .NET
C Sharp (प्रोग्रामिंग लैंग्वेज)|C# और अन्य .NET Framework|.NET भाषाओं में, मानक स्ट्रीम किसके द्वारा संदर्भित की जाती हैं  (स्टडीन के लिए),   (स्टडआउट के लिए) और   (stderr के लिए)। स्टडिन और स्टडआउट स्ट्रीम के लिए बुनियादी पढ़ने और लिखने की क्षमता भी सीधे कक्षा के माध्यम से उपलब्ध है   (उदा   की जगह इस्तेमाल किया जा सकता है  ).

,  और   हैं   (stdin) और   (stdout, stderr) ऑब्जेक्ट्स, जो केवल टेक्स्ट के आधार पर अंतर्निहित मानक धाराओं तक पहुंच की अनुमति देते हैं। मानक धाराओं के लिए पूर्ण बाइनरी एक्सेस के माध्यम से किया जाना चाहिए   द्वारा लौटाई गई वस्तुएँ ,   और   क्रमश। <वाक्यविन्यास प्रकाश लैंग = सी #> // सी # उदाहरण सार्वजनिक स्थैतिक पूर्णांक मुख्य (स्ट्रिंग [] तर्क) {   कोशिश { स्ट्रिंग एस = System.Console.In.ReadLine ; डबल नंबर = डबल। पार्स (ओं); System.Console.Out.WriteLine(संख्या है: {0:F3}, संख्या); वापसी 0;

// अगर पार्स ने एक अपवाद फेंक दिया } कैच (ArgumentNullException) { System.Console.Error.WriteLine (कोई नंबर दर्ज नहीं किया गया था!); } कैच (प्रारूप अपवाद) { System.Console.Error.WriteLine (निर्दिष्ट मान मान्य संख्या नहीं है!); } कैच (ओवरफ्लो अपवाद) { System.Console.Error.WriteLine (निर्दिष्ट संख्या बहुत बड़ी है!); }

वापसी -1; } 

सिंटैक्सहाइलाइट लैंग = वीबीनेट> ' विजुअल बेसिक .NET उदाहरण

सार्वजनिक समारोह मुख्य पूर्णांक के रूप में कोशिश Dim s as String = System.Console.[In].ReadLine डबल के रूप में मंद संख्या = डबल। पार्स (एस) System.Console.Out.WriteLine( संख्या है: {0:F3}, संख्या) वापसी 0

' अगर पार्स ने अपवाद फेंक दिया Ex को System.ArgumentNullException के रूप में पकड़ें System.Console। [त्रुटि]। राइटलाइन (कोई संख्या दर्ज नहीं की गई थी!) Ex2 को System.FormatException के रूप में पकड़ें System.Console। [त्रुटि]। राइटलाइन (निर्दिष्ट मान मान्य संख्या नहीं है!) Ex3 को System.OverflowException के रूप में पकड़ें System.Console। [त्रुटि]। राइटलाइन (निर्दिष्ट संख्या बहुत बड़ी है!) प्रयास समाप्त करें

वापसी -1 अंत समारोह 

आवेदन करते समय  कक्षा (कंप्यूटर विज्ञान) उदाहरण संपत्ति (प्रोग्रामिंग) का उपयोग कर सकते हैं ,  , और   प्रक्रिया की मानक धाराओं तक पहुँचने के लिए उस वर्ग का।

2000 - : पायथन (2 या 3)
निम्न उदाहरण दिखाता है कि मानक इनपुट दोनों को मानक आउटपुट पर पुनर्निर्देशित कैसे किया जाए और एक पाठ फ़ाइल के लिए।

<वाक्यविन्यास लैंग = पायथन लाइन = 1> आयात प्रणाली stdin_fileno = sys.stdin stdout_fileno = sys.stdout sys.stdout = open('myfile.txt', 'w') सीटीआर = 0 stdin_fileno में आईपीएस के लिए: सीटीआर = एसटीआर (सीटीआर) # पुनर्निर्देशित स्टडआउट पर प्रिंट करता है sys.stdout.write(ctrs + ) यह रीडायरेक्ट करने के लिए है ---> + inps + '\n')   # वास्तविक सहेजे गए स्टडआउट हैंडलर को प्रिंट करता है    stdout_fileno.write(ctrs + ) यह वास्तविक है ---> + inps + '\n') सीटीआर = सीटीआर + 1 sys.stdout.close sys.stdout = stdout_fileno 
 * 1) !/usr/bin/env python
 * 1) मौजूदा स्टडआउट को सेव करें ताकि हम sys.stdout को वापस ला सकें
 * 2) हमारे द्वारा अपना पुनर्निर्देशन पूरा करने के बाद
 * 1) फ़ाइल के लिए sys.stdout को पुनर्निर्देशित करें
 * 1) फ़ाइल बंद करें
 * 1) हमारे पुराने सहेजे गए फ़ाइल हैंडलर में sys.stdout को पुनर्स्थापित करें

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

सेवा मेनू, जैसा कि NeXTSTEP और Mac OS X पर लागू किया गया है, मानक स्ट्रीम के अनुरूप भी है। इन ऑपरेटिंग सिस्टम पर, ग्राफ़िकल एप्लिकेशन एक सिस्टम-वाइड मेनू के माध्यम से कार्यक्षमता प्रदान कर सकते हैं जो GUI में वर्तमान विक्ट: चयन पर संचालित होता है, चाहे वह किसी भी एप्लिकेशन में हो।

कुछ जीयूआई प्रोग्राम, मुख्य रूप से यूनिक्स पर, अभी भी मानक त्रुटि के लिए डिबग जानकारी लिखते हैं। अन्य (जैसे कई यूनिक्स मीडिया प्लेयर) मानक इनपुट से फ़ाइलें पढ़ सकते हैं। लोकप्रिय विंडोज प्रोग्राम जो अपने जीयूआई विंडो के अलावा एक अलग कंसोल विंडो खोलते हैं, एमुलेटर पीएसएक्स (एमुलेटर) और से DOSBox  हैं।

जीटीके-सर्वर एक जीयूआई को साकार करने के लिए व्याख्या किए गए प्रोग्राम के साथ एक संचार इंटरफेस के रूप में स्टडिन का उपयोग कर सकता है।

सीएलआईएम प्रतिमान एक विस्तारित आउटपुट स्ट्रीम में भेजे गए जीयूआई तत्वों को प्रस्तुत करता है।

यह भी देखें

 * पुनर्निर्देशन (कंप्यूटिंग)
 * स्ट्रीम (कंप्यूटिंग)
 * इनपुट आउटपुट
 * सी फ़ाइल इनपुट/आउटपुट
 * सिसिन और सिसौट
 * OpenVMS#मानक स्ट्रीम

स्रोत

 * मानक स्ट्रीम, html जीएनयू सी लाइब्रेरी
 * KRONOS 2.1 संदर्भ मैनुअल, कंट्रोल डेटा कॉर्पोरेशन, भाग संख्या 60407000, 1974
 * एनओएस वर्जन 1 एप्लीकेशन प्रोग्रामर का इंस्टेंट, कंट्रोल डेटा कॉर्पोरेशन, पार्ट नंबर 60436000, 1978
 * लेवल 68 मल्टिक्स पर प्रोग्रामिंग का परिचय, हनीवेल कॉर्पोरेशन, 1981
 * MVS ऑपरेटिंग सिस्टम का विकास, IBM Corporation, 1981
 * UNIX छठे संस्करण पर लायंस की टिप्पणी, जॉन लायंस, ISBN 1-57398-013-7, 1977
 * कंसोल क्लास, .NET फ्रेमवर्क क्लास लाइब्रेरी, माइक्रोसॉफ्ट कॉर्पोरेशन, 2008

बाहरी संबंध

 * Standard Input Definition - by The Linux Information Project
 * Standard Output Definition - by The Linux Information Project
 * Standard Error Definition - by The Linux Information Project