- •Потоки и файлы
- •Текстовые потоки
- •Стандартные потоки
- •Связь с консольным вводом / выводом
- •Ввод / вывод на консоль
- •Основы файловой системы
- •Указатель файла
- •Открытие файла
- •Допустимые значения режим
- •Перенаправление стандартных потоков: функция freopen()
- •Закрытие файла
- •Чтение и запись символов(стандартные потоки)
- •Трудности использования getchar()
- •Запись символа
- •Чтение символа
- •Чтение и запись строк (стандартные потоки)
- •Ввод / вывод строк: fputs() и fgets()
- •Int printf(const char *управляющая_строка, ...);
- •Спецификаторы преобразования для функции printf()
- •Int scanf(const char *управляющая_строка, ...);
- •Спецификаторы преобразования
- •Спецификаторы преобразования для функции scanf()
- •Использование feof()
Стандартные потоки
Что касается файловой системы языка С, то в начале выполнения программы автоматически открываются три потока. Это stdin (стандартный поток ввода), stdout (стандартный поток вывода) и stderr (стандартный поток ошибок). Обычно эти потоки направляются к консоли, но в средах, которые поддерживают перенаправление ввода/вывода, они могут быть перенаправлены операционной системой на другое устройство. (Перенаправление ввода/вывода поддерживается, например, такими операционными системами, как Windows, DOS, UNIX и OS/2.)
Так как стандартные потоки являются указателями файлов, то они могут использоваться системой ввода/вывода языка С также для выполнения операций ввода/вывода на консоль.
Вообще говоря, stdin используется для считывания с консоли, a stdout и stderr — для записи на консоль.
В роли указателей файлов потоки stdin, stdout и stderr можно применять в любой функции, где используется переменная типа FILE *.
stdin, stdout и stderr — это не переменные в обычном смысле, и им нельзя присваивать значение с помощью fopen(). Кроме того, именно потому, что в начале работы программы эти указатели файлов создаются автоматически, в конце работы они и закрываются автоматически. Так что и не пытайтесь самостоятельно их закрыть.
Связь с консольным вводом / выводом
В языке С консольный и файловый ввод/вывод не слишком отличаются друг от друга. Функции консольного ввода/вывода на самом деле направляют результаты своих операций на один из потоков — stdin или stdout, и по сути, каждая из них является специальной версией соответствующей файловой функции. Функции консольного ввода/вывода для того и существуют, чтобы было удобно именно программисту.
Программа называется TEST. В средах, в которых поддерживается перенаправление ввода/вывода, один из потоков stdin или stdout (или оба одновременно) можно перенаправить в файл. Например, в среде DOS или Windows следующий запуск TEST
TEST > OUTPUT
приводит к тому, что вывод этой программы будет записан в файл по имени OUTPUT. А следующий запуск TEST
TEST < INPUT > OUTPUT
направляет поток stdin в файл по имени INPUT, а поток стандартного вывода — в файл по имени OUTPUT.
Когда С-программа завершается, то все перенаправленные потоки возвращаются в состояния, которые были установлены по умолчанию.
Ввод / вывод на консоль
В языке С не определено никаких ключевых слов, с помощью которых можно выполнять ввод/вывод. Вместо них используются библиотечные функции. Система ввода/вывода языка С — это элегантная конструкция, которая обеспечивает гибкий и в то же время слаженный механизм передачи данных от одного устройства к другому. Впрочем, эта система достаточно большая и состоит из нескольких различных функций. Заголовочным файлом для функций ввода/вывода является <stdio.h>.
Имеются как консольные, так и файловые функции ввода/вывода. С практической точки зрения консольный и файловый ввод/вывод отличаются друг от друга очень мало. Однако теоретически они находятся в двух очень "разных мирах".
В стандарте языка С не определены никакие функции, предназначенные для выполнения различных операций управления экраном (например, позиционирования курсора) или вывода на него графики. И не определены потому, что эти операции на разных машинах очень сильно отличаются. Кроме того, в стандартном С не определены никакие функции, которые выполняют операции вывода в обычном или диалоговом окне, создаваемом в среде Windows. Функции ввода/вывода на консоль выполняют всего лишь телетайпный вывод. Однако в библиотеках большинства компиляторов имеются функции графики и управления экраном, предназначенные для той среды, в которой как раз и должны выполняться программы. И, конечно же, на языке С можно писать Windows-программы. Просто в С не определены функции, которые выполняли бы эти задачи напрямую.