|
1 | 1 | # Как устроен ввод и вывод в языке Си. Потоки ввода и вывода |
2 | 2 |
|
3 | | -Возвращаемся к основной теме урока -- вводу и выводу данных. Разберёмся как он устроен в Си. |
| 3 | +Разберёмся, как устроен ввод и вывод данных в языке Си. |
4 | 4 |
|
5 | | -Помните в программе "Hello, World!" мы подключили заголовочный файл `stdio.h`, чтобы пользоваться стандартной функцией `printf()`? Так вот, кроме этой функции в файле есть множество других для ввода и вывода данных и других штук. Но нас сейчас интересуют не все эти функции, а стандартные потоки ввода и вывода, которые там тоже определены: =стандартный поток ввода= -- `stdin` и =стандартный поток вывода= -- `stdout`. |
| 5 | +Помните в программе "Hello, World!" мы подключили заголовочный файл `stdio.h`, чтобы пользоваться стандартной функцией `printf()`? Так вот, кроме этой функции файл `stdio.h` содержит множество других функций для ввода и вывода данных и прочих полезных штук. Но нас сейчас интересуют не все эти функции, а стандартные потоки ввода и вывода, которые там определены: =стандартный поток ввода= -- `stdin` и =стандартный поток вывода= -- `stdout`. |
6 | 6 |
|
7 | 7 | Что ещё за потоки? Чтобы лучше это понять, думайте о них, как о последовательности символов. |
8 | 8 | Следующая картинка иллюстрирует работу потоков: |
9 | 9 |
|
10 | | - |
| 10 | + |
11 | 11 |
|
12 | | -Стандартный поток ввода называется `stdin` (от standard input) и обычно связан с клавиатурой, а стандартный поток вывода `stdout` (standard output) -- с экраном терминала(консоли). Я говорю обычно, потому что есть возможность перенаправить эти потоки, т.е. сделать так, чтобы данные выводились не на экран, а в какой-нибудь файл или получать данные не с клавиатуры, а из файла. |
| 12 | +Стандартный поток ввода называется `stdin` (от standard input) и обычно связан с клавиатурой, а стандартный поток вывода `stdout` (standard output) -- с экраном терминала (консоли). Я говорю обычно, потому что есть возможность перенаправить эти потоки, т.е. сделать так, чтобы данные выводились не на экран, а в какой-нибудь файл или получать данные не с клавиатуры, а из файла. |
13 | 13 |
|
14 | | -По сути наша программа работает именно с этими потоками и не особо обращает внимание с чем конкретно они связаны (файл, экран терминала, клавиатура). Для неё главное понимать, что данные приходят из потока ввода, а отправлять их надо в поток вывода. |
| 14 | +Фактически наша программа работает именно с этими потоками и не особо заморачивается о том, с чем конкретно они связаны (файл, экран терминала, клавиатура). Для программы главное, что данные приходят из стандартного потока ввода, а отправлять их надо в стандартный поток вывода. Всё остальное -- забота операционной системы. |
15 | 15 |
|
16 | 16 | Т.е. когда мы в программе "Hello, World!" вызывали функцию `printf("Hello, World!\n")`, то более точно было бы сказать, что функция отправила эту строку не на экран консоли, а в стандартный поток вывода, который связан с экраном консоли и поэтому строка появлялась на экране. |
17 | 17 |
|
18 | | - |
| 18 | + |
| 19 | + |
| 20 | +**Подведём итог:** |
| 21 | +Потоки в Си -- это такая абстрактная модель для взаимодействия программ с данными. Программа не знает, откуда приходят данные (клавиатура, файл) или куда отправляются данные (экран, файл). Она просто читает данные из потока ввода (stdin) и записывает данные в поток вывода (stdout), а за взаимодействие с клавиатурой или экраном терминала отвечает операционная система. |
0 commit comments