[ Содержание ]
Стандартный ввод, вывод и вывод ошибки — это одна из базовых технологий Linux, которая будет использоваться вами повсеместно.
Внимание! | Материал, который будет дан в этом разделе, обязателен к изучению и… пониманию. Если не понять концепцию стандартных ввода, вывода и вывода ошибки, которые используются почти везде, работать в системе будет сложно. |
Для работы с файлами в Linux программисты могут использовать четыре базовых функции:
- open — открывает файл и возвращает индексный дескриптор открытого файла.
- read — читает данные из файла.
- write — записывает данные в файл.
- close — закрывает файл.
Когда функция open открывает файл, она возвращает индексный дескриптор — номер открытого файла. У каждой программы своя нумерация файлов, начинающаяся с нуля. При вызове функций read, write и close им в качестве параметра передаётся этот номер.
В Linux есть интересная особенность: у любой программы, работающей в системе, автоматически открываются три файла с индексными дескрипторами 0, 1 и 2. Этих файлов в файловой системе не существует, они являются виртуальными и не имеют реальных имен. Но у них есть названия:
- stdin (стандартный ввод) — файл с индексным дескриптором 0.
- stdout (стандартный вывод) — файл с индексным дескриптором 1.
- stderr (стандартный вывод ошибки) — файл с индексным дескриптором 2.
Эти файлы не надо открывать при помощи функции open, они уже итак открыты системой. Их не надо закрывать после использования, они виртуальные и будут автоматически закрыты после завершения выполнения программы.
В чем особенность этих файлов? Они связаны с терминалом на котором выполняется данная программа:
- Если записать данные в файл стандартного вывода, данные будут выведены на экран терминала.
- Если записать данные в файл стандартного вывода ошибки, они тоже будут выведены на экран терминала.
- Если читать из файла стандартного ввода, будет получено то, что пользователь вводил на клавиатуре.
Если необходимо вывести данные на экран терминала, данные достаточно записать в файл стандартного вывода. Например, программа ls записывает список файлов в файл стандартного вывода и поэтому мы видим его на экране. Или программа cat, она тоже записывает содержимое файла в стандартный вывод.
Если во время выполнения программы возникают ошибки, сообщения об ошибках записывают в файл стандартного вывода ошибки и мы их видим на экране терминала.
Таким образом, программистам, разрабатывающим программы, не приходится выдумывать специальные функции для общения с различными терминалами.
Какие возможности эти файлы дают пользователям системы? Вы можете перенаправлять эти файлы в реальные файлы файловой системы. То есть вместо того, что бы данные выводились на экран, они будут попадать в указанный файл. Или наоборот, читать данные не с клавиатуры, а из указанного файла файловой системы.
Конвейеры
[ Содержание ]