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

From Vigyanwiki
m (Abhishek moved page मानक धाराएँ to मानक विधा without leaving a redirect)
(No difference)

Revision as of 14:49, 26 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.

मानक त्रुटि

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

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

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


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

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

  2>&1

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

 >&

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


समयरेखा

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

फोरट्रान के पास यूनिक्स फाइल डिस्क्रिप्टर के बराबर है: परंपरा के अनुसार, कई फोरट्रान कार्यान्वयन इकाई संख्या का उपयोग करते हैं यूनिट=5 for stdin, यूनिट =6 for स्टडआउट और UNIT=0 for stderr. फोरट्रान-2003, आंतरिक आईएसओ_फोरट्रान_ईएनवी मॉड्यूल नामित स्थिरांक सम्मिलित करने के लिए मानकीकृत किया गया था इनपुट_यूनिट , आउटपुट_यूनिट , और त्रुटि यूनिट नंबरों को पोर्टेबल रूप से निर्दिष्ट करने के लिए।

! 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

एल्गोल 60 को मानक फ़ाइल पहुंच न होने के लिए आलोचना की गई थी।

1968: एल्गोल 68

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

उदाहरण
# 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)
)
इनपुट आउटपुट
3.14159
Number is: +3.142 OR Number is: +3.142!


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

सी प्रोग्रामिंग भाषा में, मानक इनपुट, आउटपुट, और त्रुटि विधा को उपस्थित यूनिक्स फ़ाइल निरुपक 0, 1 और 2 के साथ जोड़ा जाता है। पॉज़िक्स पर्यावरण में, <unistd.h> परिभाषाएं स्टडीन फिलेनो, एसटीडीआउट फिलेनो या एसटीडी ईआरआर _फिलेनो का उपयोग किया जाता है।

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


1995: जावा

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

    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# और अन्य .NET भाषाओं में, मानक स्ट्रीम्स को सिस्टम.कंसोल.इन के लिए सिस्टम.कंसोल.आउट के लिए और सिस्टम.कंसोल..त्रुटि के द्वारा संदर्भित किया जाता है। स्टडीन और एसटीडीआउट विधा के लिए मूल रीड और राइट क्षमताएं सीधे सिस्टम.कंसोल कक्षा के माध्यम से भी पहुंचनी योग्य होती हैं (उदाहरण के लिए,सिस्टम.कंसोल आउट.राइट लाइन () के अतिरिक्त सिस्टम.कंसोल आउट.राइट लाइन () का उपयोग किया जा सकता है)।


       // C# example
public static int Main(string[] args)
{
    try {
        string s = System.Console.In.ReadLine();
        double number = double.Parse(s);
        System.Console.Out.WriteLine("Number is: {0:F3}", number);
        return 0;

    // If Parse() threw an exception
    } catch (ArgumentNullException) { 
        System.Console.Error.WriteLine("No number was entered!");
    } catch (FormatException) {
        System.Console.Error.WriteLine("The specified value is not a valid number!");
    } catch (OverflowException) {
        System.Console.Error.WriteLine("The specified number is too big!");
    }

    return -1;
}
  ' Visual Basic .NET example
Public Function Main() As Integer
    Try
        Dim s As String = System.Console.[In].ReadLine()
        Dim number As Double = Double.Parse(s)
        System.Console.Out.WriteLine("Number is: {0:F3}", number)
        Return 0

    ' If Parse() threw an exception
    Catch ex As System.ArgumentNullException
        System.Console.[Error].WriteLine("No number was entered!")
    Catch ex2 As System.FormatException
        System.Console.[Error].WriteLine("The specified value is not a valid number!")
    Catch ex3 As System.OverflowException
        System.Console.[Error].WriteLine("The specified number is too big!")
    End Try

    Return -1
End Function
   

सिस्टम.डायग्नोस्टिक्स.प्रोसेस कक्षा का उपयोग करते समय, उस कक्षा के उदाहरण गुण StandardInput, StandardOutput और StandardError का उपयोग प्रक्रिया के मानक स्ट्रीम्स तक पहुंचने के लिए किया जा सकता है।

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

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

  #!/usr/bin/env python
1 import sys
2 # Save the current stdout so that we can revert sys.stdout
3 #  after we complete our redirection
4 stdin_fileno = sys.stdin
5 stdout_fileno = sys.stdout
6 # Redirect sys.stdout to the file
7 sys.stdout = open('myfile.txt', 'w') 8ctr = 0
9 for inps in stdin_fileno:
10 ctrs = str(ctr)
11 # Prints to the redirected stdout ()
12  sys.stdout.write(ctrs + ") this is to the redirected --->" + inps + '\n')
13  # Prints to the actual saved stdout handler
14  stdout_fileno.write(ctrs + ") this is to the actual  --->" + inps + '\n')
15  ctr = ctr + 1
16  # Close the file
17  sys.stdout.close()
18  # Restore sys.stdout to our old saved file handler
19 sys.stdout = stdout_fileno

जीयूआई

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

नेक्स्टस्टेप और मैक ओएस एक्स पर लागू किए जाने वाले सेवाएं मानक विधा के समकक्ष भी हैं। इन ऑपरेटिंग सिस्टम पर, ग्राफिकल एप्लिकेशन सिस्टम-व्यापी मेनू के माध्यम से कार्यक्षमता प्रदान कर सकते हैं जो जीयूआई में वर्तमान चयनपर कार्य करता है

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

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

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

यह भी देखें

संदर्भ

  1. 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.
  2. 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
  3. McIlroy, M. D. (1987). A Research Unix reader: annotated excerpts from the Programmer's Manual, 1971–1986 (PDF) (Technical report). CSTR. Bell Labs. 139.


स्रोत

बाहरी संबंध