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 являются символьными или блочными устройствами, фактически драйвером устройства. У них нет размера, но у них есть старший и младший номер устройства.

Когда вы открываете их, вы подключаетесь к драйверу устройства, а не к физическому файлу, а драйвер устройства достаточно умен, чтобы знать, что отдельные процессы должны обрабатываться отдельно.

В качестве дополнения к ответам, приведенным выше, ниже приводится сводная информация о перенаправлениях: Stdin что это в программировании. Смотреть фото Stdin что это в программировании. Смотреть картинку Stdin что это в программировании. Картинка про Stdin что это в программировании. Фото Stdin что это в программировании

На рисунке написано, что 2> & 1 имеет тот же эффект, что и &> однако

Боюсь, что ваше понимание полностью отсталое. 🙂

Подумайте о «стандартном входе», «стандартном выходе» и «стандартной ошибке» с точки зрения программы, а не с точки зрения ядра.

Любой из этих файлов может быть легко перенаправлен из командной консоли, например так:

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *