Файлы и потоки

Программа взаимодействует с целевой средой путем чтения и записи файлов. Файл может представлять собой:

  • Набор данных, который можно считывать и записывать многократно.

  • Поток байт, создаваемый программой (например, конвейер).

  • Поток байт, полученный из периферийного устройства или отправленный на периферийное устройство.

Последние два элемента — это интерактивные файлы. Как правило, файлы являются основным способом взаимодействия с программой. Все эти типы файлов управляются одинаково: вызывая функции библиотеки. Для объявления большинства этих функций необходимо включать стандартный заголовок STDIO.H.

Перед выполнением большинства операций над файлом его необходимо открыть. Открытие файла связывает его с потоком — структурой данных в стандартной библиотеке C, которая сглаживает большинство различий между файлами различных типов. Библиотека поддерживает состояние каждого потока в объекте типа FILE.

Перед запуском программы целевая среда открывает три файла. Файл можно открыть, вызвав функцию fopenбиблиотеки с _wfopen двумя аргументами. (Функция fopen устарела, используйте _wfopen_sfopen_s вместо этого.) Первый аргумент — это имя файла. Вторым аргументом является строка C, определяющая:

  • предполагается ли считывание данных из файла или запись в него данных (либо и то, и другое);

  • Планируется ли создать новое содержимое для файла (или создать файл, если он ранее не существовал) или оставить существующее содержимое.

  • может ли запись в файл изменить существующее содержимое или следует только добавить байты в конец файла;

  • с текстовым потоком или двоичным потоком требуется работать.

После того как файл успешно открыт, можно определить, является ли поток ориентированным на байты (байтовым потоком), или ориентированным на расширенные символы (расширенный поток). Поток изначально несвязан. Вызов некоторых функций для работы над потоком делает его байтовым, тогда как некоторые другие функции делают его расширенным. После установки поток сохраняет ориентацию, пока она не будет закрыта вызовом fclose или freopen.

© 1989-2001 P.J. Plauger и Джим Броди. Все права защищены.

См. также

Текстовые и двоичные потоки
Байты и широкие потоки
Управление потоками
Состояния потоковой передачи