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

From Vigyanwiki
Line 2: Line 2:
{{About|मानक I/O फ़ाइल डिस्क्रिप्टर|सिस्टम V स्ट्रीम|स्ट्रीम}}
{{About|मानक I/O फ़ाइल डिस्क्रिप्टर|सिस्टम V स्ट्रीम|स्ट्रीम}}


तीन इनपुट/आउटपुट (I/O) कनेक्शन मानक इनपुट (stdin), मानक आउटपुट (stdout) और मानक त्रुटि (stderr) कहलाते हैं।


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


== आवेदन ==
== आवेदन ==
[[File:Stdstreams-notitle.svg|thumb|right|इनपुट, आउटपुट और त्रुटि के लिए मानक स्ट्रीम|206x206px]]उपयोगकर्ताओं को सामान्यतः स्टैंडर्ड स्ट्रीम्स के रूप में इनपुट और आउटपुट चैनलों के रूप में जाना जाता है जो एक इनपुट उपकरण से आने वाले डेटा को हैंडल करते हैं, या जो डेटा को एप्लिकेशन से लिखते हैं। इस डेटा में किसी भी कोडिंग के साथ पाठ हो सकता है, या बाइनरी डेटा हो सकता है। आधुनिक बहुत सारे सिस्टमों में, एक प्रोग्राम का स्टैंडर्ड त्रुटि स्ट्रीम आमतौर पर त्रुटि विश्लेषण के उद्देश्यों के लिए एक लॉग फ़ाइल में रीडायरेक्ट किया जाता है।
[[File:Stdstreams-notitle.svg|thumb|right|इनपुट, आउटपुट और त्रुटि के लिए मानक विधा |206x206px]]उपयोगकर्ताओं को सामान्यतः मानक विधा के रूप में इनपुट और आउटपुट चैनलों के रूप में जाना जाता है जो एक इनपुट उपकरण से आने वाले डेटा का प्रयोग करते हैं, या जो डेटा को आवेदन से लिखते हैं। इस डेटा में किसी भी कोडिंग के साथ पाठ हो सकता है, या बाइनरी डेटा हो सकता है। आधुनिक बहुत सारे सिस्टमों में, एक प्रोग्राम का मानक त्रुटि विधा सामान्यतः त्रुटि विश्लेषण के उद्देश्यों के लिए एक लॉग फ़ाइल में पुन: निर्देशित किया जाता है।


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


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


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


यूनिक्स की एक और सफलता डिफ़ॉल्ट रूप से क्रमशः इनपुट और आउटपुट को टर्मिनल कीबोर्ड और टर्मिनल डिस्प्ले से स्वचालित रूप से जोड़ना था{{citation needed|date=December 2013}} — प्रोग्राम (और प्रोग्रामर) ने एक विशिष्ट इनपुट-प्रोसेस-आउटपुट प्रोग्राम के लिए इनपुट और आउटपुट स्थापित करने के लिए बिल्कुल कुछ नहीं किया (जब तक कि उसने एक अलग प्रतिमान नहीं चुना)। इसके विपरीत, पिछले ऑपरेटिंग सिस्टम को आमतौर पर कनेक्शन स्थापित करने के लिए कुछ-अक्सर जटिल-[[ नौकरी नियंत्रण भाषा ]] की आवश्यकता होती है, या समकक्ष बोझ को प्रोग्राम द्वारा ऑर्केस्ट्रेटेड किया जाना था।{{citation needed|date=October 2017}}
दूसरी यूनिक्स की प्रमुख उपलब्धि यह थी कि इनपुट और आउटपुट डिफ़ॉल्ट रूप से टर्मिनल कुंजीपटल और टर्मिनल प्रदर्शन के साथ संबंधित किए जाते थे, प्रोग्राम एक सामान्य इनपुट-प्रोसेस-आउटपुट प्रोग्राम के लिए इनपुट और आउटपुट स्थापित करने के लिए कुछ भी नहीं करता था। इसके विपरीत, पिछले ऑपरेटिंग सिस्टम सामान्यतः  संयोजन स्थापित करने के लिए कुछ कठिन - जॉब कंट्रोल भाषा की आवश्यकता थी, या समकक्ष बोझ को प्रोग्राम द्वारा संगठित किया जाना पड़ता था।।


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


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


==मानक इनपुट (stdin)==<!-- This section is linked from [[COMMAND.COM]] -->
यदि पुनर्निर्देशित नहीं किया गया हो, तो मानक इनपुट मूल प्रक्रिया से विरासत में ली जाती है। एक पुनर्निर्देशित शेल के मामले में, यह सामान्यतः कुंजीपटल से संबद्ध होता है।
मानक इनपुट एक स्ट्रीम है जिससे एक प्रोग्राम अपने इनपुट डेटा को पढ़ता है। प्रोग्राम रीड ऑपरेशन के उपयोग से डेटा ट्रांसफर का अनुरोध करता है। सभी प्रोग्रामों को स्ट्रीम इनपुट की आवश्यकता नहीं होती है। उदाहरण के लिए, dir (कमांड) और ls प्रोग्राम (जो एक निर्देशिका में निहित फ़ाइल नाम प्रदर्शित करते हैं) कमांड-लाइन इंटरफ़ेस#Arguments|कमांड-लाइन तर्क ले सकते हैं, परंतु  बिना किसी स्ट्रीम डेटा इनपुट के अपना संचालन करते हैं।


जब तक पुनर्निर्देशन (कंप्यूटिंग), मानक इनपुट मूल प्रक्रिया से वि[[रास]]त में नहीं मिलता है। इंटरएक्टिव शेल के मामले में, जो आमतौर पर [[कीबोर्ड (कंप्यूटिंग)]] से जुड़ा होता है।
<code>std::cin</code>.स्टैंडर्ड इनपुट के लिए [[फाइल डिस्क्रिप्टर]] 0 (शून्य) होता है;[[पॉज़िक्स]] <code><unistd.h></code> परिभाषा में इसका नाम STDIN_FILENO होता है; संबंधित C <code><stdio.h></code> चर stdin होता है; उसी तरह, C++ <code><iostream></code> चर std::cin होता है।


मानक इनपुट के लिए [[फाइल डिस्क्रिप्टर]] 0 (शून्य) है; [[पॉज़िक्स]] <code><unistd.h></code> परिभाषा है <code>STDIN_FILENO</code>; संबंधित सी <code><stdio.h></code> चर है <code>FILE* stdin</code>; इसी तरह, सी ++ <code><iostream></code> चर है <code>std::cin</code>.
== मानक आउटपुट (स्टडआउट) ==
 
मानक आउटपुट एक विधा  है जिसमें एक प्रोग्राम अपना आउटपुट डेटा लिखता है। प्रोग्राम राइट ऑपरेशन के साथ डेटा ट्रांसफर का अनुरोध करता है। सभी प्रोग्राम आउटपुट उत्पन्न नहीं करते हैं। उदाहरण के लिए, [[नाम बदलें (कंप्यूटिंग)]] कमांड (विभिन्न प्रकार से [[एमवी (यूनिक्स)]], [[ चाल (आदेश) ]], या [[रेन (कमांड)]] कहा जाता है) सफलता पर मौन है।
== मानक आउटपुट (स्टडआउट) ==<!-- This section is linked from [[COMMAND.COM]] -->
मानक आउटपुट एक स्ट्रीम है जिसमें एक प्रोग्राम अपना आउटपुट डेटा लिखता है। प्रोग्राम राइट ऑपरेशन के साथ डेटा ट्रांसफर का अनुरोध करता है। सभी प्रोग्राम आउटपुट उत्पन्न नहीं करते हैं। उदाहरण के लिए, [[नाम बदलें (कंप्यूटिंग)]] कमांड (विभिन्न प्रकार से [[एमवी (यूनिक्स)]], [[ चाल (आदेश) ]], या [[रेन (कमांड)]] कहा जाता है) सफलता पर मौन है।


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


== मानक त्रुटि (stderr) ==<!-- This section is linked from [[COMMAND.COM]] -->
== मानक त्रुटि (stderr) ==<!-- This section is linked from [[COMMAND.COM]] -->
मानक त्रुटि एक अन्य आउटपुट स्ट्रीम है जो आमतौर पर प्रोग्राम द्वारा आउटपुट [[त्रुटि संदेश]] या डायग्नोस्टिक्स के लिए उपयोग की जाती है। यह मानक आउटपुट से स्वतंत्र एक स्ट्रीम है और इसे अलग से पुनर्निर्देशित किया जा सकता है।
मानक त्रुटि एक अन्य आउटपुट विधा  है जो आमतौर पर प्रोग्राम द्वारा आउटपुट [[त्रुटि संदेश]] या डायग्नोस्टिक्स के लिए उपयोग की जाती है। यह मानक आउटपुट से स्वतंत्र एक विधा  है और इसे अलग से पुनर्निर्देशित किया जा सकता है।


यह अर्ध-विधेय समस्या को हल करता है। अर्ध-विधेय समस्या, आउटपुट और त्रुटियों को अलग करने की इजाजत देता है, और मूल्यों की एक जोड़ी लौटने वाले फ़ंक्शन के समान होता है - सेमीप्रिडिकेट समस्या # मल्टीवैल्यूड रिटर्न | अर्ध-विधेय समस्या देखें: बहु मूल्यवान वापसी। सामान्य गंतव्य पाठ टर्मिनल है जिसने मानक आउटपुट पुनर्निर्देशित होने पर भी देखे जाने का सबसे अच्छा मौका प्रदान करने के लिए कार्यक्रम शुरू किया (इसलिए आसानी से नहीं देखा गया)। उदाहरण के लिए, एक पाइपलाइन (यूनिक्स) में एक प्रोग्राम का आउटपुट अगले प्रोग्राम या एक टेक्स्ट फ़ाइल के इनपुट पर पुनर्निर्देशित किया जाता है, परंतु  प्रत्येक प्रोग्राम की त्रुटियां अभी भी सीधे टेक्स्ट टर्मिनल में जाती हैं ताकि वास्तविक समय में उपयोगकर्ता द्वारा उनकी समीक्षा की जा सके।<ref>{{cite web |title=What are stdin, stdout and stderr in Linux? {{!}} CodePre.com |url=https://codepre.com/en/was-sind-stdin-stdout-und-stderr-unter-linux.html |access-date=8 April 2022 |language=en |date=2 December 2021}}</ref>
यह अर्ध-विधेय समस्या को हल करता है। अर्ध-विधेय समस्या, आउटपुट और त्रुटियों को अलग करने की इजाजत देता है, और मूल्यों की एक जोड़ी लौटने वाले फ़ंक्शन के समान होता है - सेमीप्रिडिकेट समस्या # मल्टीवैल्यूड रिटर्न | अर्ध-विधेय समस्या देखें: बहु मूल्यवान वापसी। सामान्य गंतव्य पाठ टर्मिनल है जिसने मानक आउटपुट पुनर्निर्देशित होने पर भी देखे जाने का सबसे अच्छा मौका प्रदान करने के लिए कार्यक्रम शुरू किया (इसलिए आसानी से नहीं देखा गया)। उदाहरण के लिए, एक पाइपलाइन (यूनिक्स) में एक प्रोग्राम का आउटपुट अगले प्रोग्राम या एक टेक्स्ट फ़ाइल के इनपुट पर पुनर्निर्देशित किया जाता है, परंतु  प्रत्येक प्रोग्राम की त्रुटियां अभी भी सीधे टेक्स्ट टर्मिनल में जाती हैं ताकि वास्तविक समय में उपयोगकर्ता द्वारा उनकी समीक्षा की जा सके।<ref>{{cite web |title=What are stdin, stdout and stderr in Linux? {{!}} CodePre.com |url=https://codepre.com/en/was-sind-stdin-stdout-und-stderr-unter-linux.html |access-date=8 April 2022 |language=en |date=2 December 2021}}</ref>
मानक आउटपुट और मानक त्रुटि को एक ही गंतव्य पर निर्देशित करना स्वीकार्य और सामान्य है, जैसे टेक्स्ट टर्मिनल। संदेश उसी क्रम में दिखाई देते हैं जैसे प्रोग्राम उन्हें लिखता है, जब तक कि [[डेटा बफ़र]] शामिल न हो। उदाहरण के लिए, सामान्य स्थितियों में मानक त्रुटि धारा अप्रभावित होती है परंतु  मानक आउटपुट धारा रेखा-बफर होती है; इस मामले में, मानक त्रुटि के लिए लिखा गया पाठ बाद में टर्मिनल पर पहले दिखाई दे सकता है, यदि मानक आउटपुट स्ट्रीम बफर अभी तक भरा नहीं है।
मानक आउटपुट और मानक त्रुटि को एक ही गंतव्य पर निर्देशित करना स्वीकार्य और सामान्य है, जैसे टेक्स्ट टर्मिनल। संदेश उसी क्रम में दिखाई देते हैं जैसे प्रोग्राम उन्हें लिखता है, जब तक कि [[डेटा बफ़र]] शामिल न हो। उदाहरण के लिए, सामान्य स्थितियों में मानक त्रुटि धारा अप्रभावित होती है परंतु  मानक आउटपुट धारा रेखा-बफर होती है; इस मामले में, मानक त्रुटि के लिए लिखा गया पाठ बाद में टर्मिनल पर पहले दिखाई दे सकता है, यदि मानक आउटपुट विधा  बफर अभी तक भरा नहीं है।


मानक त्रुटि के लिए फाइल डिस्क्रिप्टर को POSIX द्वारा 2 (दो) के रूप में परिभाषित किया गया है; <unistd.h> हेडर फ़ाइल प्रतीक प्रदान करती है <code>STDERR_FILENO</code>;<ref>{{cite web |url=http://pubs.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html |work=The Open Group Base Specifications Issue 6&mdash;IEEE Std 1003.1, 2004 Edition |title=&lt;unistd.h> |publisher=The Open Group |year=2004 }}</ref> संबंधित सी <code><stdio.h></code> चर है <code>FILE* stderr</code>. सी ++ <code><iostream></code> मानक हेडर इस स्ट्रीम से जुड़े दो चर प्रदान करता है: <code>std::cerr</code> और <code>std::clog</code>, पूर्व को अप्रभावित किया जा रहा है और बाद में उसी बफ़रिंग तंत्र का उपयोग किया जा रहा है जैसा कि अन्य सभी C++ स्ट्रीम में होता है।
मानक त्रुटि के लिए फाइल डिस्क्रिप्टर को POSIX द्वारा 2 (दो) के रूप में परिभाषित किया गया है; <unistd.h> हेडर फ़ाइल प्रतीक प्रदान करती है <code>STDERR_FILENO</code>;<ref>{{cite web |url=http://pubs.opengroup.org/onlinepubs/009695399/basedefs/unistd.h.html |work=The Open Group Base Specifications Issue 6&mdash;IEEE Std 1003.1, 2004 Edition |title=&lt;unistd.h> |publisher=The Open Group |year=2004 }}</ref> संबंधित सी <code><stdio.h></code> चर है <code>FILE* stderr</code>. सी ++ <code><iostream></code> मानक हेडर इस विधा  से जुड़े दो चर प्रदान करता है: <code>std::cerr</code> और <code>std::clog</code>, पूर्व को अप्रभावित किया जा रहा है और बाद में उसी बफ़रिंग तंत्र का उपयोग किया जा रहा है जैसा कि अन्य सभी C++ विधा  में होता है।


[[बॉर्न शेल]]-शैली के गोले मानक त्रुटि को उसी गंतव्य पर पुनर्निर्देशित करने की अनुमति देते हैं जो मानक आउटपुट को उपयोग करने के लिए निर्देशित किया जाता है
[[बॉर्न शेल]]-शैली के गोले मानक त्रुटि को उसी गंतव्य पर पुनर्निर्देशित करने की अनुमति देते हैं जो मानक आउटपुट को उपयोग करने के लिए निर्देशित किया जाता है
Line 113: Line 110:


=== 1970 का दशक: सी और यूनिक्स ===
=== 1970 का दशक: सी और यूनिक्स ===
[[सी प्रोग्रामिंग भाषा]] में, मानक इनपुट, आउटपुट और एरर स्ट्रीम क्रमशः मौजूदा यूनिक्स फाइल डिस्क्रिप्टर 0, 1 और 2 से जुड़े होते हैं।<ref>{{Cite web|url=http://linux.die.net/man/3/stdin|title = Stdin(3): Standard I/O streams - Linux man page}}</ref> POSIX वातावरण में [[ जादू संख्या (प्रोग्रामिंग) ]] के बजाय <unistd.h> परिभाषाओं STDIN_FILENO, STDOUT_FILENO या STDERR_FILENO का उपयोग किया जाना चाहिए। फाइल पॉइंटर्स स्टडिन, स्टडआउट और स्टेडर भी प्रदान किए जाते हैं।
[[सी प्रोग्रामिंग भाषा]] में, मानक इनपुट, आउटपुट और एरर विधा  क्रमशः मौजूदा यूनिक्स फाइल डिस्क्रिप्टर 0, 1 और 2 से जुड़े होते हैं।<ref>{{Cite web|url=http://linux.die.net/man/3/stdin|title = Stdin(3): Standard I/O streams - Linux man page}}</ref> POSIX वातावरण में [[ जादू संख्या (प्रोग्रामिंग) ]] के बजाय <unistd.h> परिभाषाओं STDIN_FILENO, STDOUT_FILENO या STDERR_FILENO का उपयोग किया जाना चाहिए। फाइल पॉइंटर्स स्टडिन, स्टडआउट और स्टेडर भी प्रदान किए जाते हैं।


[[केन थॉम्पसन]] (मूल यूनिक्स ऑपरेटिंग सिस्टम के डिजाइनर और कार्यान्वयनकर्ता) ने [[संस्करण 5 यूनिक्स]] में संशोधित [[सॉर्ट (यूनिक्स)]] को मानक इनपुट के रूप में स्वीकार किया, जो अन्य उपयोगिताओं में फैल गया और संस्करण 8 में एक [[विशेष फ़ाइल]] के रूप में ऑपरेटिंग सिस्टम का एक हिस्सा बन गया। यूनिक्स। डायग्नोस्टिक्स [[संस्करण 6 यूनिक्स]] के माध्यम से मानक आउटपुट का हिस्सा थे, जिसके बाद डेनिस एम. रिची ने मानक त्रुटि की अवधारणा बनाई।<ref name="reader">{{cite techreport |first1=M. D. |last1=McIlroy |author-link1=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |title=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}}</ref>
[[केन थॉम्पसन]] (मूल यूनिक्स ऑपरेटिंग सिस्टम के डिजाइनर और कार्यान्वयनकर्ता) ने [[संस्करण 5 यूनिक्स]] में संशोधित [[सॉर्ट (यूनिक्स)]] को मानक इनपुट के रूप में स्वीकार किया, जो अन्य उपयोगिताओं में फैल गया और संस्करण 8 में एक [[विशेष फ़ाइल]] के रूप में ऑपरेटिंग सिस्टम का एक हिस्सा बन गया। यूनिक्स। डायग्नोस्टिक्स [[संस्करण 6 यूनिक्स]] के माध्यम से मानक आउटपुट का हिस्सा थे, जिसके बाद डेनिस एम. रिची ने मानक त्रुटि की अवधारणा बनाई।<ref name="reader">{{cite techreport |first1=M. D. |last1=McIlroy |author-link1=Doug McIlroy |year=1987 |url=http://www.cs.dartmouth.edu/~doug/reader.pdf |title=A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 |series=CSTR |number=139 |institution=Bell Labs}}</ref>
Line 136: Line 133:


=== 2000 का दशक: .NET ===
=== 2000 का दशक: .NET ===
C Sharp (प्रोग्रामिंग लैंग्वेज)|C# और अन्य .NET Framework|.NET भाषाओं में, मानक स्ट्रीम किसके द्वारा संदर्भित की जाती हैं <code>System.Console.In</code> (स्टडीन के लिए), <code>System.Console.Out</code> (स्टडआउट के लिए) और <code>System.Console.Error</code> (stderr के लिए)।<ref>{{Cite web|url=https://referencesource.microsoft.com/#mscorlib/system/console.cs,34|title=C# Reference Source, .NET Framework 4.7.1, mscorlib, Console class|website=referencesource.microsoft.com|access-date=2017-12-10}}</ref> स्टडिन और स्टडआउट स्ट्रीम के लिए बुनियादी पढ़ने और लिखने की क्षमता भी सीधे कक्षा के माध्यम से उपलब्ध है <code>System.Console</code> (उदा <code>System.Console.WriteLine()</code> की जगह इस्तेमाल किया जा सकता है <code>System.Console.Out.WriteLine()</code>).
C Sharp (प्रोग्रामिंग लैंग्वेज)|C# और अन्य .NET Framework|.NET भाषाओं में, मानक विधा  किसके द्वारा संदर्भित की जाती हैं <code>System.Console.In</code> (स्टडीन के लिए), <code>System.Console.Out</code> (स्टडआउट के लिए) और <code>System.Console.Error</code> (stderr के लिए)।<ref>{{Cite web|url=https://referencesource.microsoft.com/#mscorlib/system/console.cs,34|title=C# Reference Source, .NET Framework 4.7.1, mscorlib, Console class|website=referencesource.microsoft.com|access-date=2017-12-10}}</ref> स्टडिन और स्टडआउट विधा  के लिए बुनियादी पढ़ने और लिखने की क्षमता भी सीधे कक्षा के माध्यम से उपलब्ध है <code>System.Console</code> (उदा <code>System.Console.WriteLine()</code> की जगह इस्तेमाल किया जा सकता है <code>System.Console.Out.WriteLine()</code>).


<code>System.Console.In</code>, <code>System.Console.Out</code> और <code>System.Console.Error</code> हैं <code>System.IO.TextReader</code> (stdin) और <code>System.IO.TextWriter</code> (stdout, stderr) ऑब्जेक्ट्स, जो केवल टेक्स्ट के आधार पर अंतर्निहित मानक धाराओं तक पहुंच की अनुमति देते हैं। मानक धाराओं के लिए पूर्ण बाइनरी एक्सेस के माध्यम से किया जाना चाहिए <code>System.IO.Stream</code> द्वारा लौटाई गई वस्तुएँ <code>System.Console.OpenStandardInput()</code>, <code>System.Console.OpenStandardOutput()</code> और <code>System.Console.OpenStandardError()</code> क्रमश।
<code>System.Console.In</code>, <code>System.Console.Out</code> और <code>System.Console.Error</code> हैं <code>System.IO.TextReader</code> (stdin) और <code>System.IO.TextWriter</code> (stdout, stderr) ऑब्जेक्ट्स, जो केवल टेक्स्ट के आधार पर अंतर्निहित मानक धाराओं तक पहुंच की अनुमति देते हैं। मानक धाराओं के लिए पूर्ण बाइनरी एक्सेस के माध्यम से किया जाना चाहिए <code>System.IO.Stream</code> द्वारा लौटाई गई वस्तुएँ <code>System.Console.OpenStandardInput()</code>, <code>System.Console.OpenStandardOutput()</code> और <code>System.Console.OpenStandardError()</code> क्रमश।
Line 205: Line 202:
     सीटीआर = एसटीआर (सीटीआर)
     सीटीआर = एसटीआर (सीटीआर)
     # पुनर्निर्देशित स्टडआउट पर प्रिंट करता है ()
     # पुनर्निर्देशित स्टडआउट पर प्रिंट करता है ()
     sys.stdout.write(ctrs + ) यह रीडायरेक्ट करने के लिए है ---> + inps + '\n')
     sys.stdout.write(ctrs + ) यह पुन: निर्देशित करने के लिए है ---> + inps + '\n')
     # वास्तविक सहेजे गए स्टडआउट हैंडलर को प्रिंट करता है
     # वास्तविक सहेजे गए स्टडआउट हैंडलर को प्रिंट करता है
     stdout_fileno.write(ctrs + ) यह वास्तविक है ---> + inps + '\n')
     stdout_fileno.write(ctrs + ) यह वास्तविक है ---> + inps + '\n')
Line 218: Line 215:
[[ ग्राफिकल यूज़र इंटरफ़ेस ]] (जीयूआई) हमेशा मानक धाराओं का उपयोग नहीं करते हैं; वे तब करते हैं जब जीयूआई अंतर्निहित स्क्रिप्ट और/या कंसोल प्रोग्राम के रैपर होते हैं, उदाहरण के लिए सिनैप्टिक (सॉफ़्टवेयर) पैकेज मैनेजर जीयूआई, जो डेबियन और/या उबंटू में उपयुक्त कमांड को लपेटता है। [[ कहाँ ]] प्रोजेक्ट द्वारा ज़ेनिटी और केडायलॉग जैसे स्क्रिप्टिंग टूल के साथ जीयूआई बनाए गए हैं<ref>{{cite web |url=https://www.linux-magazine.com/Issues/2009/99/Zenity-and-KDialog |first=Kristian |last=Kißling |title=Zenity और KDialog के साथ अपनी स्क्रिप्ट में ग्राफ़िक तत्व जोड़ना|website=[[Linux Magazine]] |date=2009 |access-date=2021-04-11}}</ref> स्टडिन, स्टडआउट और स्टेडर का उपयोग करें, और [[क्यूटी (सॉफ्टवेयर)]], [[जीटीके]], या अन्य समकक्ष मालिकाना विजेट ढांचे का उपयोग करके सी/सी ++ में प्रोग्राम किए गए और संकलित पूर्ण जीयूआई के बजाय सरल स्क्रिप्ट पर आधारित हैं।
[[ ग्राफिकल यूज़र इंटरफ़ेस ]] (जीयूआई) हमेशा मानक धाराओं का उपयोग नहीं करते हैं; वे तब करते हैं जब जीयूआई अंतर्निहित स्क्रिप्ट और/या कंसोल प्रोग्राम के रैपर होते हैं, उदाहरण के लिए सिनैप्टिक (सॉफ़्टवेयर) पैकेज मैनेजर जीयूआई, जो डेबियन और/या उबंटू में उपयुक्त कमांड को लपेटता है। [[ कहाँ ]] प्रोजेक्ट द्वारा ज़ेनिटी और केडायलॉग जैसे स्क्रिप्टिंग टूल के साथ जीयूआई बनाए गए हैं<ref>{{cite web |url=https://www.linux-magazine.com/Issues/2009/99/Zenity-and-KDialog |first=Kristian |last=Kißling |title=Zenity और KDialog के साथ अपनी स्क्रिप्ट में ग्राफ़िक तत्व जोड़ना|website=[[Linux Magazine]] |date=2009 |access-date=2021-04-11}}</ref> स्टडिन, स्टडआउट और स्टेडर का उपयोग करें, और [[क्यूटी (सॉफ्टवेयर)]], [[जीटीके]], या अन्य समकक्ष मालिकाना विजेट ढांचे का उपयोग करके सी/सी ++ में प्रोग्राम किए गए और संकलित पूर्ण जीयूआई के बजाय सरल स्क्रिप्ट पर आधारित हैं।


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


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


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


== यह भी देखें ==
== यह भी देखें ==
* पुनर्निर्देशन (कंप्यूटिंग)
* पुनर्निर्देशन (कंप्यूटिंग)
* [[स्ट्रीम (कंप्यूटिंग)]]
* [[स्ट्रीम (कंप्यूटिंग)|विधा  (कंप्यूटिंग)]]
* इनपुट आउटपुट
* इनपुट आउटपुट
* सी फ़ाइल इनपुट/आउटपुट
* सी फ़ाइल इनपुट/आउटपुट
* [[सिसिन]] और [[सिसौट]]
* [[सिसिन]] और [[सिसौट]]
* OpenVMS#मानक स्ट्रीम
* OpenVMS#मानक विधा


==संदर्भ==
==संदर्भ==

Revision as of 21:52, 25 June 2023


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

आवेदन

इनपुट, आउटपुट और त्रुटि के लिए मानक विधा

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

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

पृष्ठभूमि

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

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

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

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

मानक इनपुट (stdin)

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

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

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

मानक आउटपुट (स्टडआउट)

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

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

मानक आउटपुट के लिए फाइल डिस्क्रिप्टर 1 (एक) है; पॉज़िक्स <unistd.h> परिभाषा है STDOUT_FILENO; संबंधित सी <stdio.h> चर है FILE* stdout; इसी तरह, सी ++ <iostream> चर है std::cout.

मानक त्रुटि (stderr)

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

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

मानक त्रुटि के लिए फाइल डिस्क्रिप्टर को POSIX द्वारा 2 (दो) के रूप में परिभाषित किया गया है; <unistd.h> हेडर फ़ाइल प्रतीक प्रदान करती है STDERR_FILENO;[2] संबंधित सी <stdio.h> चर है FILE* stderr. सी ++ <iostream> मानक हेडर इस विधा से जुड़े दो चर प्रदान करता है: std::cerr और std::clog, पूर्व को अप्रभावित किया जा रहा है और बाद में उसी बफ़रिंग तंत्र का उपयोग किया जा रहा है जैसा कि अन्य सभी C++ विधा में होता है।

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

 2>और 1

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

 >&

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


समयरेखा

1950 का दशक: फोरट्रान

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

! FORTRAN 77 example
      PROGRAM MAIN
        INTEGER NUMBER
        READ(UNIT=5,*) NUMBER
        WRITE(UNIT=6,'(A,I3)') ' NUMBER IS: ',NUMBER
      END
! Fortran 2003 example
program main
  use iso_fortran_env
  implicit none
  integer :: number
  read (unit=INPUT_UNIT,*) number
  write (unit=OUTPUT_UNIT,'(a,i3)') 'Number is: ', number
end program


1960: एल्गोल 60

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

1968: एल्गोल 68

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

Example
# ALGOL 68 example #
main:(
  REAL number;
  getf(stand in,($g$,number));
  printf(($"Number is: "g(6,4)"OR "$,number)); # OR #
  putf(stand out,($" Number is: "g(6,4)"!"$,number));
  newline(stand out)
)
Input: Output:
3.14159
Number is: +3.142 OR Number is: +3.142!


1970 का दशक: सी और यूनिक्स

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

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


1995: जावा

जावा (प्रोग्रामिंग भाषा) में, मानक धाराओं को किसके द्वारा संदर्भित किया जाता है System.in (stdin के लिए), System.out (स्टडआउट के लिए), और System.err (stderr के लिए)।[7]

public static void main(String args[]) {
    try {
        BufferedReader br = 
          new BufferedReader(new InputStreamReader(System.in));
        String s = br.readLine();
        double number = Double.parseDouble(s);
        System.out.println("Number is:" + number);
    } catch (Exception e) {
        System.err.println("Error:" + e.getMessage());
    }
}


2000 का दशक: .NET

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

System.Console.In, System.Console.Out और System.Console.Error हैं System.IO.TextReader (stdin) और System.IO.TextWriter (stdout, stderr) ऑब्जेक्ट्स, जो केवल टेक्स्ट के आधार पर अंतर्निहित मानक धाराओं तक पहुंच की अनुमति देते हैं। मानक धाराओं के लिए पूर्ण बाइनरी एक्सेस के माध्यम से किया जाना चाहिए System.IO.Stream द्वारा लौटाई गई वस्तुएँ System.Console.OpenStandardInput(), System.Console.OpenStandardOutput() और System.Console.OpenStandardError() क्रमश। <वाक्यविन्यास प्रकाश लैंग = सी #> // सी # उदाहरण सार्वजनिक स्थैतिक पूर्णांक मुख्य (स्ट्रिंग [] तर्क) {

   कोशिश {
       स्ट्रिंग एस = 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

अंत समारोह </वाक्यविन्यास हाइलाइट>

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

2000 - : पायथन (2 या 3)

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

<वाक्यविन्यास लैंग = पायथन लाइन = 1>

  1. !/usr/bin/env python

आयात प्रणाली

  1. मौजूदा स्टडआउट को सेव करें ताकि हम sys.stdout को वापस ला सकें
  2. हमारे द्वारा अपना पुनर्निर्देशन पूरा करने के बाद

stdin_fileno = sys.stdin stdout_fileno = sys.stdout

  1. फ़ाइल के लिए sys.stdout को पुनर्निर्देशित करें

sys.stdout = open('myfile.txt', 'w') सीटीआर = 0 stdin_fileno में आईपीएस के लिए:

   सीटीआर = एसटीआर (सीटीआर)
   # पुनर्निर्देशित स्टडआउट पर प्रिंट करता है ()
   sys.stdout.write(ctrs + ) यह पुन: निर्देशित करने के लिए है ---> + inps + '\n')
   # वास्तविक सहेजे गए स्टडआउट हैंडलर को प्रिंट करता है
   stdout_fileno.write(ctrs + ) यह वास्तविक है ---> + inps + '\n')
   सीटीआर = सीटीआर + 1
  1. फ़ाइल बंद करें

sys.stdout.close ()

  1. हमारे पुराने सहेजे गए फ़ाइल हैंडलर में sys.stdout को पुनर्स्थापित करें

sys.stdout = stdout_fileno </वाक्यविन्यास हाइलाइट>

जीयूआई

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

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

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

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

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

यह भी देखें

संदर्भ

  1. "What are stdin, stdout and stderr in Linux? | CodePre.com" (in English). 2 December 2021. Retrieved 8 April 2022.
  2. "<unistd.h>". The Open Group Base Specifications Issue 6—IEEE Std 1003.1, 2004 Edition. The Open Group. 2004.
  3. Johnson, Steve (2013-12-11). "[TUHS] Graphic Systems C/A/T phototypesetter" (Mailing list). Archived from the original on 2020-09-25. Retrieved 2020-11-07.
  4. Revised Report on the Algorithmic Language Algol 68, Edited by A. van Wijngaarden, B.J. Mailloux, J.E.L. Peck, C.H.A. Koster, M. Sintzoff, C.H. Lindsey, L.G.L.T. Meertens and R.G. Fisker, http://www.softwarepreservation.org/projects/ALGOL/report/Algol68_revised_report-AB.pdf, Section 10.3
  5. "Stdin(3): Standard I/O streams - Linux man page".
  6. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.
  7. "System (Java Platform SE 7)". Retrieved 20 July 2012.
  8. "C# Reference Source, .NET Framework 4.7.1, mscorlib, Console class". referencesource.microsoft.com. Retrieved 2017-12-10.
  9. Kißling, Kristian (2009). "Zenity और KDialog के साथ अपनी स्क्रिप्ट में ग्राफ़िक तत्व जोड़ना". Linux Magazine. Retrieved 2021-04-11.


स्रोत

बाहरी संबंध