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

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

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

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

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

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

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

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

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

यदि पुनर्निर्देशित नहीं किया गया हो, तो मानक इनपुट मूल प्रक्रिया से विरासत में ली जाती है। एक पुनर्निर्देशित शेल के मामले में, यह सामान्यतः कुंजीपटल से संबद्ध होता है।

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

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

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

मानक आउटपुट के लिए फाइल डिस्क्रिप्टर 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