Кіріспе
Компьютерлік бағдарламалардың байланыстырылған кіріс және шығыс ағындары, стандартты I/O файл дескрипторлары. Компьютерлік бағдарламалауда стандартты ағындар – компьютерлік бағдарлама мен оның орындалуын бастаған кездегі ортасы арасындағы алдын ала байланыстырылған кіріс және шығыс байланыс арналары болып табылады. Үш кіріс/шығыс (I/O) байланысы стандартты кіріс (stdin), стандартты шығыс (stdout) және стандартты қате (stderr) деп аталады. Алғашқыда I/O физикалық түрде қосылған жүйелік консоль арқылы жүзеге асырылды (пернетақта арқылы кіріс, монитор арқылы шығыс), бірақ стандартты ағындар осыдан абстракция жасайды. Команда интерактивті қабықша арқылы орындалғанда, ағындар әдетте қабықша жұмыс істейтін мәтіндік терминалға қосылады, бірақ оларды қайта бағыттау немесе құбыр желісі арқылы өзгертуге болады. Жалпы алғанда, бағынышты процесс өз ата-ана процесінің стандартты ағындарын мұралайды.
standard I/O file descriptors
In computer programming, standard streams are preconnected input and output communication channels between a computer program and its environment when it begins execution. The three input/output (I/O) connections are called standard input (stdin), standard output (stdout) and standard error (stderr). Originally I/O happened via a physically connected system console (input via keyboard, output via monitor), but standard streams abstract this. When a command is executed via an interactive shell, the streams are typically connected to the text terminal on which the shell is running, but can be changed with redirection or a pipeline. More generally, a child process inherits the standard streams of its parent process.
Қолдану
Пайдаланушылар әдетте стандартты ағындарды деректерді енгізу құрылғысынан қабылдайтын немесе қолданбадан деректерді жазатын енгізу және шығару арналары ретінде біледі. Деректер кез келген кодировкадағы мәтін немесе екілік деректер болуы мүмкін. Бағдарлама демон ретінде іске қосылғанда, оның стандартты қате ағыны әдетте қателерді талдау үшін журналдық файлға қайта бағытталады. Ағындар қолданбаларды тізбектеу үшін пайдаланылуы мүмкін, яғни бір бағдарламаның шығыс ағыны екінші қолданбаның енгізу ағыны ретінде қайта бағытталуы мүмкін. Көптеген операциялық жүйелерде бұл қолданба атауларын тізімдеу арқылы көрсетіледі, олар тура сызық символымен бөлінеді, сондықтан оны көбінесе құбыр белгісі деп атайды. Белгілі бір мысал – more сияқты беттеу қолданбасын пайдалану, ол пайдаланушыға шығыс ағынының экрандағы көрсетілуін басқаруға мүмкіндік береді.
Өмірбаян
Unix-ке дейінгі көптеген операциялық жүйелерде бағдарламалар тиісті кіріс және шығыс құрылғыларына тікелей қосылуы керек еді. Операциялық жүйенің өзгеше ерекшеліктері осыны бағдарламалауды қиын міндетке айналдырды. Көптеген жүйелерде орта параметрлерін басқару, жергілікті файл тізіміне қол жеткізу, күтілетін деректер жиынтығын анықтау және перфокарта оқығыш, магниттік таспа жетегі, дискі жетегі, желілік принтер, карта перфораторы немесе интерактивті терминал сияқты жағдайларда аппаратты дұрыс басқару қажет болды. Unix-тің маңызды жетістіктерінің бірі – абстрактілі құрылғылар, олар бағдарламаға қандай құрылғылармен байланысып жатқанын білу немесе оған қамқорлық ету қажеттілігін жойды. Ескі операциялық жүйелер бағдарламалаушыға жазба құрылымын және көбінесе ортогональды емес деректер семантикасын және құрылғыны басқаруды талап етті. Unix дерек ағыны түсінігі арқылы осы күрделілікті жойды: файл соңына дейін оқылатын дерек байттарының реттілігі. Бағдарлама қалағанда байттарды жаза алады және олардың санын немесе топталуын жариялау қажеттілігі де, мүмкіндігі де жоқ. Unix-тің тағы бір үлкен жетістігі – кіріс пен шығысты терминал пернетақтасы мен терминал дисплейіне автоматты түрде байланыстыру, яғни әдетте бағдарлама (және бағдарламашы) стандартты кіріс-шығыс бағдарламасы үшін кіріс пен шығысты орнату үшін ештеңе жасамайды (басқа парадигманы таңдамаса). Алдыңғы операциялық жүйелерде байланысты орнату үшін көбінесе күрделі жұмыс басқару тілі қажет болды немесе осыған ұқсас жүктеме бағдарламамен ұйымдастырылуы керек еді. Unix стандартты ағындарды қамтамасыз еткендіктен, Unix C орындалу ортасы да оны қолдауға міндетті болды. Осының нәтижесінде, C орындалу орталарының көпшілігі (және C-тің ұрпақтары), операциялық жүйеге қарамастан, эквивалентті функционалдылықты ұсынады.
Стандартты кіріс (stdin)
Стандартты кіріс – бағдарламаның кіріс деректерін оқитын дерек ағыны. Бағдарлама деректерді беруді оқу операциясы арқылы сұрайды. Барлық бағдарламаларға дерек ағыны қажет емес. Мысалы, dir және ls бағдарламалары (директориядағы файл атауларын көрсетіп беретін) командалық жол аргументтерін қабылдауы мүмкін, бірақ ешқандай дерек ағынысыз операцияларын орындайды. Бағытталмаса, стандартты кіріс ата-процестен мұраға алынады. Интерактивті қабықта, ол әдетте терминалдың (немесе псевдотерминалдың) кіріс құрылғысымен байланысты болады, ол тікелей пайдаланушының пернетақтасына жалғанады. POSIX жүйелерінде стандартты кіріс үшін файл дескрипторы 0 (нөл) болып табылады; POSIX <unistd.h> анықтамасы STDIN_FILENO; сәйкес C <stdio.h> абстракциясы FILE* stdin жаһандық айнымалысы арқылы ұсынылады. Сол сияқты, <iostream> типіндегі C++ std::cin жаһандық айнымалысы C++ ағындары арқылы абстракция ұсынады. Ұқсас абстракциялар дерлік барлық бағдарламалау тілдерінің стандартты I/O кітапханаларында бар.
Стандартты шығыс (stdout)
Стандартты шығыс – бағдарлама өз шығыс деректерін жазатын ағын. Бағдарлама деректерді беруді жазу операциясы арқылы сұрайды. Барлық бағдарламалар шығыс жасамайды. Мысалы, файлды қайта аталдыру командасы (mv, move немесе ren деп аталады) сәтті орындалғанда ешқандай хабар бермейді. Бағытталмаса, стандартты шығыс ата-процестен мұраға алынады. Интерактивті қабықта, бұл әдетте бағдарламаны іске қосқан мәтіндік терминал болады. Стандартты шығысқа арналған файл дескрипторы 1 (бір); POSIX <unistd.h> анықтамасы STDOUT_FILENO; сәйкес C <stdio.h> айнымалысы FILE* stdout; сондай-ақ, C++ <iostream> айнымалысы std::cout.
1960: АЛГОЛ 60
ALGOL 60 стандартты файлдарға қолжетімділік болмауы үшін сынға түсті.
1970 жылдар: C және Unix
C бағдарламалау тілінде стандартты кіріс, шығыс және қате ағындары Unix файл дескрипторларымен сәйкесінше 0, 1 және 2 байланыстырылған. POSIX ортасында «сиқырлы сандардың» орнына <unistd. h> анықтамалары STDIN_FILENO, STDOUT_FILENO немесе STDERR_FILENO қолданылуы тиіс. Файл көрсеткіштері stdin, stdout және stderr де ұсынылған. Кен Томпсон (түпнұсқалық Unix операциялық жүйесінің әзірлеушісі және іске асырушысы) Unix-тің 5-ші нұсқасында " " символын стандартты кіріс ретінде қабылдау үшін sort бағдарламасын өзгертті, бұл басқа құралдарға тарады және 8-ші нұсқада операциялық жүйенің арнайы файлының бөлігіне айналды. 6-шы нұсқаға дейін диагностика стандартты шығыстың құрамында болды, содан кейін Деннис М. Ричи стандартты қате туралы ұғымды қалыптастырды.
ЖСБ
Графикалық пайдаланушы интерфейстері (GUI) әрқашан стандартты ағындарды пайдаланбайды; олар GUI негізгі скрипттер мен/немесе консольдік бағдарламалардың қаптамасы болған кезде пайдаланады, мысалы, Synaptic пакет менеджері GUI, ол Debian және/немесе Ubuntu-да apt командаларын қаптайды. KDE жобасының Zenity және KDialog сияқты скрипттеу құралдарымен жасалған GUI, stdin, stdout және stderr қолданады және Qt, GTK немесе басқа да эквивалентті жабдықталған виджеттерді пайдаланып C/C++ тілінде бағдарламаланған және құрастырылған толыққанды GUI емес, қарапайым скрипттерге негізделген. NeXTSTEP және Mac OS X жүйелеріндегі Қызметтер мәзірі де стандартты ағындарға ұқсас. Осы операциялық жүйелерде графикалық қолданбалар, қандай қолданба болмасын, GUI-дегі ағымдағы таңдау бойынша жұмыс істейтін жүйелік мәзір арқылы функционалдық мүмкіндіктерді ұсынуы мүмкін. Кейбір GUI бағдарламалары, әсіресе Unix жүйелерінде, әлі де жөндеу туралы ақпаратты стандартты қатеге жазады. Басқалары (мысалы, көптеген Unix медиа ойнатқыштары) стандартты кірістен файлдарды оқи алады. GUI терезелеріне қосымша бөлек консоль терезесін ашатын танымал Windows бағдарламалары pSX және DOSBox эмуляторлары болып табылады. GTK сервері GUI-ді іске асыру үшін stdin-ді интерпретацияланған бағдарламамен байланыс интерфейсі ретінде пайдалана алады. Common Lisp Interface Manager парадигмасы кеңейтілген шығыс ағынына жіберілген GUI элементтерін "көрсетеді".