Введение

Функциональность ввода/вывода в языке программирования C

Язык программирования C предоставляет множество стандартных функций библиотеки для ввода и вывода файлов. Эти функции составляют основную часть заголовочного файла стандартной библиотеки C. Эта функциональность берет начало из "портативного пакета ввода-вывода", разработанного Майком Леском в Bell Labs в начале 1970-х годов и официально ставшего частью операционной системы Unix в версии 7. Функциональность ввода/вывода в C достаточно низкоуровневая по современным меркам; C абстрагирует все файловые операции в операции над потоками байтов, которые могут быть "входными потоками" или "выходными потоками". В отличие от некоторых более ранних языков программирования, C не имеет прямой поддержки файлов с произвольным доступом; для чтения записи из середины файла программисту необходимо создать поток, перейти в середину файла и затем последовательно считывать байты из этого потока. Модель файлового ввода-вывода, основанная на потоках, получила распространение благодаря Unix, который разрабатывался параллельно с самим языком программирования C. Подавляющее большинство современных операционных систем унаследовали потоки от Unix, а многие языки семейства языков программирования C унаследовали интерфейс файлового ввода-вывода C с незначительными изменениями (например, PHP).

Обзор

Эта библиотека использует так называемые потоки для работы с физическими устройствами, такими как клавиатуры, принтеры, терминалы, или с любыми другими типами файлов, поддерживаемыми системой. Потоки — это абстракция, обеспечивающая единообразное взаимодействие с ними. Все потоки обладают схожими свойствами, независимо от специфических характеристик физических носителей, с которыми они связаны.

Расширения

Стандарт POSIX определяет несколько расширений в своих базовых определениях, среди которых функция выделения памяти, функции, устанавливающие связь между объектами и файловыми дескрипторами, и группа функций для создания объектов, ссылающихся на буферы в памяти.

Альтернативы студии

Разработано несколько альтернатив. Среди них библиотека C++, являющаяся частью стандарта ISO C++. ISO C++ по-прежнему требует реализации данной функциональности. Другие альтернативы включают библиотеку Sfio (A Safe/Fast I/O Library) от AT&T Bell Laboratories. Эта библиотека, представленная в 1991 году, была разработана для устранения несогласованностей, небезопасных практик и неэффективности в дизайне ввода-вывода. Одной из её особенностей является возможность встраивания функций обратного вызова в поток для настройки обработки данных, читаемых из или записываемых в поток. Библиотека была опубликована в 1997 году, а последний релиз состоялся 1 февраля 2005 года.