В программах на языке Си ввод-вывод выполняется с использованием либо стандартной библиотеки ввода-вывода, либо системных вызовов. Системные вызовы в различных операционных системах отличаются и поэтому непереносимы. В отличие от них функции стандартной библиотеки ввода-вывода полностью переносимы.
Для уменьшения количества обращений к устройствам (например, к диску) стандартный ввод-вывод выполняется с буферизацией.
Буфер ввода-вывода — это временная область в основной памяти, которая содержит считываемые или записываемые данные.
Данные пересылаются на устройства (с устройств) большими порциями, размер которых определяется поименованной константой BUFSIZ.
Поток (stream) — обобщенный термин для обозначения источника или адресата данных, будь то файл или некоторое физическое устройство.
Шаги файлового ввода-вывода
Для файлового ввода-вывода посредством стандартных библиотечных функций ввода-вывода необходимо выполнить следующие шаги:
  1. Подключить файл заголовков, используя следующую директиву препроцессора #include <stdio.h>.
  2. Объявить указатель на FILE для каждого файла.
  3. Открыть файл, используя функцию fopen().
  4. Использовать функции чтения-записи стандартного ввода-вывода.
  5. Закрыть файл, используя функцию fclose().
В таблице 1 приводятся некоторые поименованные константы из файла stdio.h. Значения указанных констант зависят от реализации.
Таблица 1    
КонстантаСмысл константы
EOFпризнак конца файла
NULL0
BUFSIZразмер буфера ввода-вывода
FILEструктура, определенная с помощью typedef, содержащая информацию об открытом файле
stdinуказатель на FILE, открытый для стандартного ввода
stdoutуказатель на FILE, открытый для стандартного вывода
stderrуказатель на FILE, открытый для стандартного вывода сообщений об ошибках