Стандартный ввод, вывод и вывод ошибки

Стандартный ввод, вывод и вывод ошибки — это одна из базовых технологий Linux, которая будет использоваться вами повсеместно.

Внимание! Материал, который будет дан в этом разделе, обязателен к изучению и… пониманию. Если не понять концепцию стандартных ввода, вывода и вывода ошибки, которые используются почти везде, работать в системе будет сложно.

Для работы с файлами в Linux программисты могут использовать четыре базовых функции:

  • open — открывает файл и возвращает индексный дескриптор открытого файла.
  • read — читает данные из файла.
  • write — записывает данные в файл.
  • close — закрывает файл.

Когда функция open открывает файл, она возвращает индексный дескриптор — номер открытого файла. У каждой программы своя нумерация файлов, начинающаяся с нуля. При вызове функций read, write и close им в качестве параметра передаётся этот номер.

В Linux есть интересная особенность: у любой программы, работающей в системе, автоматически открываются три файла с индексными дескрипторами 0, 1 и 2. Этих файлов в файловой системе не существует, они являются виртуальными и не имеют реальных имен. Но у них есть названия:

  • stdin (стандартный ввод) — файл с индексным дескриптором 0.
  • stdout (стандартный вывод) — файл с индексным дескриптором 1.
  • stderr (стандартный вывод ошибки) — файл с индексным дескриптором 2.

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

В чем особенность этих файлов? Они связаны с терминалом на котором выполняется данная программа:

  • Если записать данные в файл стандартного вывода, данные будут выведены на экран терминала.
  • Если записать данные в файл стандартного вывода ошибки, они тоже будут выведены на экран терминала.
  • Если читать из файла стандартного ввода, будет получено то, что пользователь вводил на клавиатуре.

Если необходимо вывести данные на экран терминала, данные достаточно записать в файл стандартного вывода. Например, программа ls записывает список файлов в файл стандартного вывода и поэтому мы видим его на экране. Или программа cat, она тоже записывает содержимое файла в стандартный вывод.

Если во время выполнения программы возникают ошибки, сообщения об ошибках записывают в файл стандартного вывода ошибки и мы их видим на экране терминала.

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

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

Перенаправления

Конвейеры