Ввод/вывод файла C


Язык программирования C предоставляет множество стандартных библиотечных функций для ввода и вывода файлов . Эти функции составляют основную часть заголовка стандартной библиотеки C <stdio.h> . [1] Функциональность происходит от «портативного пакета ввода-вывода», написанного Майком Леском из Bell Labs в начале 1970-х, [2] и официально стала частью операционной системы Unix в Версии 7 . [3]

Функционал ввода/вывода языка C по современным стандартам довольно низок; C абстрагирует все файловые операции в операции над потоками байтов , которые могут быть «входными потоками» или «выходными потоками». В отличие от некоторых более ранних языков программирования, C не имеет прямой поддержки файлов данных с произвольным доступом ; чтобы прочитать запись в середине файла, программист должен создать поток, перейти к середине файла, а затем последовательно прочитать байты из потока.

Потоковая модель файлового ввода-вывода была популяризирована Unix, которая разрабатывалась одновременно с самим языком программирования C. Подавляющее большинство современных операционных систем унаследовали потоки от Unix, а многие языки семейства языков программирования C унаследовали файловый интерфейс ввода-вывода C с небольшими изменениями (например, PHP ).

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

Большинство функций ввода/вывода файла C определены в <stdio.h> (или в заголовке C++ cstdio , который содержит стандартную функциональность C, но в пространстве имен std ).

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