Stdin что это в программировании
Перенаправление ввода-вывода
Всё в Linux — это файлы, в том числе — ввод и вывод. Операционная система идентифицирует файлы с использованием дескрипторов. Каждому процессу позволено иметь до девяти открытых дескрипторов файлов. Оболочка bash резервирует первые три дескриптора с идентификаторами 0, 1 и 2. Вот что они означают.
STDIN
STDOUT
STDERR
Если надо, STDERR и STDOUT можно перенаправить в один и тот же файл, воспользовавшись &> :
Устаревшая форма записи:
Оболочка определяет порядок перенаправления потоков в командной строке слева направо, поэтому приведенный выше пример нельзя записать так:
Для дозаписи в файл data-error.txt
Перенаправление вывода в скриптах
Существует два метода перенаправления вывода в сценариях командной строки:
Временное перенаправление вывода
Если запустить этот скрипт, обе строки попадут на экран, так как, как вы уже знаете, по умолчанию ошибки выводятся туда же, куда и обычные данные.
Запустим скрипт так, чтобы вывод STDERR попадал в файл:
Постоянное перенаправление вывода
Если в скрипте нужно перенаправлять много выводимых на экран данных, добавлять >&2 к каждому вызову echo неудобно. Вместо этого можно задать перенаправление вывода в определённый дескриптор на время выполнения скрипта, воспользовавшись командой exec :
Команду exec можно использовать не только в начале скрипта, но и в других местах:
Перенаправление ввода в скриптах
Для перенаправления ввода можно воспользоваться тем же способом, который использовался для перенаправления вывода. Например, команда exec позволяет сделать источником данных для STDIN какой-нибудь файл:
Подавление вывода
Вот, например, как подавить вывод сообщений об ошибках:
Тот же подход используется, если, например, надо очистить файл, не удаляя его:
Stdin
Стандартные потоки ввода-вывода в системах типа потоки процесса, имеющие номер (дескриптор), зарезервированный для выполнения некоторых «стандартных» функций. Как правило (хотя и не обязательно), эти дескрипторы открыты уже в момент запуска задачи (исполняемого файла).
Содержание
Стандартный ввод
Поток номер 0 (stdin) зарезервирован для чтения команд пользователя или входных данных.
При интерактивном запуске программы по умолчанию нацелен на чтение с устройства текстового интерфейса пользователя (клавиатуры). Командная оболочка UNIX (и оболочки других систем) позволяют изменять цель этого потока с помощью символа « ». Системные программы (демоны и т.п.), как правило, не пользуются этим потоком.
Стандартный вывод
Поток номер 1 (stdout) зарезервирован для вывода данных, как правило (хотя и не обязательно) текстовых.
При интерактивном запуске программы по умолчанию нацелен на запись на устройство отображения (монитор). Командная оболочка UNIX (и оболочки других систем) позволяют перенаправить этот поток с помощью символа « > ». Средства для выполнения программ в фоновом режиме (например, файл.
stderr
Поток номер 2 (stderr) зарезервирован для вывода диагностических и отладочных сообщений в текстовом виде.
Чаще всего цель этого потока совпадает с stdout, однако, в отличие от него, цель потока stderr не меняется при « > » и создании конвееров (« | »). То есть, отладочные сообщения процесса, вывод которого перенаправлен, всё равно попадут пользователю. Командная оболочка UNIX позволяет изменять цель этого потока с помощью конструкции « 2> ». Например, для подавления вывода этого потока нередко пишется «2>/dev/null».
Другое
См. также
Полезное
Смотреть что такое «Stdin» в других словарях:
STDIN — Die Standard Datenströme (englisch: standard streams) sind drei Datenströme für die Ein und Ausgabe im Betriebssystem Unix oder in verwandten Betriebssystemen. Sie werden auch von der Standard C Library unterstützt. Viele Programme verwenden… … Deutsch Wikipedia
Stdin — Die Standard Datenströme (englisch: standard streams) sind drei Datenströme für die Ein und Ausgabe im Betriebssystem Unix oder in verwandten Betriebssystemen. Sie werden auch von der Standard C Library unterstützt. Viele Programme verwenden… … Deutsch Wikipedia
Stdin — Flux standard En informatique, les flux standards sont des canaux pour l entrée et la sortie de données sur les systèmes d exploitation UNIX et assimilés. L accès à ces flux est habituellement fourni par la bibliothèque stdio.h du langage de… … Wikipédia en Français
STDIN — Standard Input Standard Eingabekanal No. 0 unter UNIX, definiert in >/usr/include/stdio.h … Acronyms
stdin — ● /S T D in/ abrév. ►FLUXDON►LANGC►UNIX Abréviation de STanDard IN. Entrée standard, c est à dire le clavier, le plus souvent. Utilisé en C et sous Unix (ce qui est presque un pléonasme) avec stderr et stdout … Dictionnaire d’informatique francophone
STDIN — Standard Input Standard Eingabekanal No. 0 unter UNIX, definiert in >/usr/include/stdio.h … Acronyms von A bis Z
STDIN — abbr. STandarD INput comp. abbr. Standard Input … United dictionary of abbreviations and acronyms
Comparison of programming languages (basic instructions) — Programming language comparisons General comparison Basic syntax Basic instructions Arrays Associative arrays String operations … Wikipedia
Standard streams — In Unix and Unix like operating systems, as well as certain programming language interfaces, the standard streams are preconnected input and output channels between a computer program and its environment (typically a text terminal) when it begins … Wikipedia
C file input/output — C Standard Library Data types Character classification Strings Mathematics File input/output Date/time Localiza … Wikipedia
Стандартные потоки
Что касается файловой системы языка С, то в начале выполнения программы автоматически открываются три потока. Это stdin (стандартный поток ввода), stdout (стандартный поток вывода) и stderr (стандартный поток ошибок). Обычно эти потоки направляются к консоли, но в средах, которые поддерживают перенаправление ввода/вывода, они могут быть перенаправлены операционной системой на другое устройство. (Перенаправление ввода/вывода поддерживается, например, такими операционными системами, как Windows, DOS, UNIX и OS/2.)
Так как стандартные потоки являются указателями файлов, то они могут использоваться системой ввода/вывода языка С также для выполнения операций ввода/вывода на консоль. Например, putchar() может быть определена таким образом:
Вообще говоря, stdin используется для считывания с консоли, a stdout и stderr — для записи на консоль.
Связь с консольным вводом / выводом
Предположим, что эта программа называется TEST. При ее нормальном выполнении на экран выводится подсказка, затем читается строка, введенная с клавиатуры, и, наконец, эта строка выводится на экран. Однако в средах, в которых поддерживается перенаправление ввода/вывода, один из потоков stdin или stdout (или оба одновременно) можно перенаправить в файл. Например, в среде DOS или Windows следующий запуск TEST
приводит к тому, что вывод этой программы будет записан в файл по имени OUTPUT. А следующий запуск TEST
направляет поток stdin в файл по имени INPUT, а поток стандартного вывода — в файл по имени OUTPUT.
Когда С-программа завершается, то все перенаправленные потоки возвращаются в состояния, которые были установлены по умолчанию.
Перенаправление стандартных потоков: функция freopen()
В следующей программе показано использование функции freopen() для перенаправления стандартного потока вывода stdout в файл с именем OUTPUT.
Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
Стандартные потоки: stdin, stdout, stdeir, stdaux, stdprn.
Когда программа начинает выполняться, автоматически открываются пять потоков. Эти потоки — стандартный ввод (stdin), стандартный вывод (stdout), стандартный вывод для сообщений об ошибках (stderr), стандартный последовательный порт (stdaux) и стандартное устройство печати (stdprn).
По умолчанию стандартный ввод/вывод и стандартный вывод сообщений об ошибках связывается с консольным терминалом.
Назначения по умолчанию для стандартного порта и стандартного устройства печати зависят от конфигурации аппаратуры компьютера; эти потоки обычно связываются с последовательным портом и принтером, но могут быть и не установлены в отдельных системах.
Следующие указатели на структуру типа. FILE определяются в файле stdio.h и могут использоваться в любом месте как указатели потоков:
extern FILE * stdin; — стандартный ввод
extern FILE * stdout; — стандартный вывод
extern FILE * stderr; — стандартный вывод сообщений об ошибках
extern FILE * sidaux; — стандартный порт
extern FILE * stdprn; — стандартное устройство печати
При запуске оттранслированной программы на выполнение можно использовать символы перенаправления в/в из командного языка MS-DOS ( или >> ) для переопределения стандартного ввода и вывода программы.
Можно переопределить stdin, stdout, stderr, stdaux или stdprn так, что они будут относиться к файлу на диске или устройству. Такие возможности предоставляет функция freopen.
Читайте также
Потоки
Потоки Последующие расширения[14] POSIX специфицируют широкий спектр механизмов «легких процессов» — потоков (группа API pthread_*()). Техника потоков вводит новую парадигму программирования вместо уже ставших традиционными UNIX-методов. Это обстоятельство часто недооценивается.
Свойства StdErr, StdIn, StdOut
Свойства StdErr, StdIn, StdOut Доступ к стандартным входным и выходным потокам с помощью свойств StdIn, StdOut и StdErr можно получить только в том случае, если сценарий запускался в консольном режиме с помощью cscript.exe. Если сценарий был запущен с помощью wscript.exe, то при попытке обратиться к
Свойства StdOut, StdIn и StdErr
Свойства StdOut, StdIn и StdErr Работать c потоками StdOut, StdIn и StdErr объекта WshScriptExec можно с помощью тех же методов, которые применяются в объекте WScript для доступа к соответствующим стандартным потокам (см. табл. 1.3). Например, запустив приведенный в листинге 1.27 сценарий ConToWin.js с помощью
10.4 ПОТОКИ
10.4 ПОТОКИ Схема реализации драйверов устройств, хотя и отвечает заложенным требованиям, страдает некоторыми недостатками, которые с годами стали заметнее. Разные драйверы имеют тенденцию дублировать свои функции, в частности драйверы, которые реализуют сетевые
Потоки
Потоки Хотя концепция процессов в системах Unix используется уже очень давно, возможность использовать несколько потоков внутри одного процесса появилась относительно недавно. Стандарт потоков Posix.1, называемый Pthreads, был принят в 1995 году. С точки зрения взаимодействия
38. Потоки
38. Потоки Язык C++ не обладает средствами для ввода/вывода. Ему это и не нужно; подобные средства легко и элегантно можно создать, применяя сам язык. Стандартная библиотека потокового ввода/вывода дает возможность осуществлять гибкий и эффективный с гарантией типа метод
7.3.1.2. Потоки
7.3.1.2. Потоки Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доетупной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало
7.3.1.2. Потоки
7.3.1.2. Потоки Потоки (streams) сетевого взаимодействия были разработаны Деннисом Ритчи для Unix Version 8 (1985). Их новая реализация называется STREAMS (именно так, в документации все буквы прописные). Впервые она стала доступной в версии 3.0 System V Unix (1986). Средство STREAMS обеспечивало
2.2.1.1 Потоки
Пример 16-2. Перенаправление stdout с помощью exec
Пример 16-3. Одновременное перенаправление устройств, stdin и stdout, с помощью команды exec
5.6. Стандартные потоки ввода, вывода и ошибок
5.6. Стандартные потоки ввода, вывода и ошибок С каждым процессом (командой, сценарием и т. п.), выполняемым в интерпретаторе shell, связан ряд открытых файлов, из которых процесс может читать свои данные, и в которые он может записывать их. Каждый из этих файлов
Смущены stdin, stdout и stderr?
То, что я хотел бы знать, какова цель этих файлов, абсолютно тупой ответ с очень небольшим техническим жаргоном!
Это настолько глупо, насколько я могу это сделать 🙂
Конечно, это в основном по соглашению. Ничто не мешает вам записать информацию об ошибках в стандартный вывод, если хотите. Вы даже можете полностью закрыть три файловых дескриптора и открыть свои собственные файлы для ввода/вывода.
Когда ваш процесс запускается, у него уже должны быть открыты эти маркеры, и он может просто читать и/или записывать их.
По умолчанию они, вероятно, подключены к вашему оконечному устройству (например, /dev/tty ), но оболочки позволят вам установить соединения между этими дескрипторами и конкретными файлами и/или устройствами (или даже конвейерами к другим процессам) до запуска вашего процесса (некоторые из возможных манипуляций довольно умные).
Re ваш комментарий:
Когда я открываю эти файлы в папке/dev, почему мне никогда не удается увидеть результаты запущенного процесса?
Это потому что они не нормальные файлы. В то время как UNIX представляет все как файл в файловой системе где-то, это не делает это на самых низких уровнях. Большинство файлов в иерархии /dev являются символьными или блочными устройствами, фактически драйвером устройства. У них нет размера, но у них есть старший и младший номер устройства.
Когда вы открываете их, вы подключаетесь к драйверу устройства, а не к физическому файлу, а драйвер устройства достаточно умен, чтобы знать, что отдельные процессы должны обрабатываться отдельно.
В качестве дополнения к ответам, приведенным выше, ниже приводится сводная информация о перенаправлениях:
На рисунке написано, что 2> & 1 имеет тот же эффект, что и &> однако
Боюсь, что ваше понимание полностью отсталое. 🙂
Подумайте о «стандартном входе», «стандартном выходе» и «стандартной ошибке» с точки зрения программы, а не с точки зрения ядра.
Любой из этих файлов может быть легко перенаправлен из командной консоли, например так: