Уроки > Стандартные потоки ввода и вывода в языке Си
Мы не продаём знания — мы ими делимся!

Если для вас это ценно, то поддержите проект.

Ваша поддержка — топливо для новых уроков!

Как устроен ввод и вывод в языке Си. Потоки ввода и вывода

Разберёмся, как устроен ввод и вывод данных в языке Си.

Помните в программе "Hello, World!" мы подключили заголовочный файл stdio.h, чтобы пользоваться стандартной функцией printf()? Так вот, кроме этой функции файл stdio.h содержит множество других функций для ввода и вывода данных и прочих полезных штук. Но нас сейчас интересуют не все эти функции, а стандартные потоки ввода и вывода, которые там определены: стандартный поток вводаstdin и стандартный поток выводаstdout.

Что ещё за потоки? Чтобы лучше это понять, думайте о них, как о последовательности символов.
Следующая картинка иллюстрирует работу потоков:

Схема работы потоков ввода и вывода

Рис.1 Схема взаимодействия программы с потоками ввода и вывода

Стандартный поток ввода называется stdin (от standard input) и обычно связан с клавиатурой, а стандартный поток вывода stdout (standard output) — с экраном терминала (консоли). Я говорю обычно, потому что есть возможность перенаправить эти потоки, т.е. сделать так, чтобы данные выводились не на экран, а в какой-нибудь файл или получать данные не с клавиатуры, а из файла.

Фактически наша программа работает именно с этими потоками и не особо заморачивается о том, с чем конкретно они связаны (файл, экран терминала, клавиатура). Для программы главное, что данные приходят из стандартного потока ввода, а отправлять их надо в стандартный поток вывода. Всё остальное — забота операционной системы.

Т.е. когда мы в программе "Hello, World!" вызывали функцию printf("Hello, World!\n"), то более точно было бы сказать, что функция отправила эту строку не на экран консоли, а в стандартный поток вывода, который связан с экраном консоли и поэтому строка появлялась на экране.

Пример работы потока вывода

Рис. 2 Пример работы потока вывода в программе Hello, World!

Подведём итог:
Потоки в Си — это такая абстрактная модель для взаимодействия программ с данными. Программа не знает, откуда приходят данные (клавиатура, файл) или куда отправляются данные (экран, файл). Она просто читает данные из потока ввода (stdin) и записывает данные в поток вывода (stdout), а за взаимодействие с клавиатурой или экраном терминала отвечает операционная система.

Дополнительные материалы

  1. Кроме стандартных потоков ввода и вывода в заголовочном файле stdio.h определён ещё stderrстандартный поток ошибок. Его используют для вывода сообщений об ошибках и различных диагностических сообщений. У него есть свои особенности, которых мы не будет касаться, т.к. не будем использовать stderr.