stringtranslate.com

Ввод/вывод файла 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 ).

Константы

Константы, определенные в заголовке <stdio.h> , включают:

Переменные

Переменные, определенные в заголовке <stdio.h> , включают:

Типы участников

Типы данных, определенные в заголовке <stdio.h> , включают:

Расширения

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

Пример

Следующая программа на языке C открывает двоичный файл с именем myfile , считывает из него пять байтов, а затем закрывает файл.

#include <stdio.h> #include <stdlib.h>  int main ( void ) { charbuffer [ 5 ] ; ФАЙЛ * fp = fopen ( "myfile" , "rb" );          if ( fp == NULL ) { perror ( «Не удалось открыть файл \" myfile \" » ); вернуть EXIT_FAILURE ; }         if ( fread ( buffer , 1 , 5 , fp ) < 5 ) { fputs ( «Произошла ошибка при чтении файла. \n » , stderr ); вернуть EXIT_FAILURE ; }             fзакрыть ( фп ); printf ( "Прочитанные байты: " ); for ( int i = 0 ; i < 5 ; ++ i ) { printf ( «%02X» , буфер [ i ]); } Путчар ( '\n' );               вернуть EXIT_SUCCESS ; } 

Альтернативы stdio

Было разработано несколько альтернатив stdio . Среди них — библиотека C++ iostream , часть стандарта ISO C++ . ISO C++ по-прежнему требует функциональности stdio .

Другие альтернативы включают библиотеку Sfio [6] (Библиотека безопасного/быстрого ввода-вывода) от AT&T Bell Laboratories . Эта библиотека, представленная в 1991 году, была призвана избежать несоответствий, небезопасных практик и неэффективности при разработке stdio . Среди его особенностей — возможность вставлять в поток функции обратного вызова для настройки обработки данных, считываемых из потока или записываемых в него. [7] Он был выпущен для внешнего мира в 1997 году, а последний выпуск состоялся 1 февраля 2005 года. [8]

Смотрите также

Рекомендации

  1. ^ Спецификация ISO/IEC 9899:1999 . п. 274, § 7.19.
  2. ^ Керниган, Брайан ; Пайк, Роб (1984). Среда программирования UNIX . Энглвудские скалы : Прентис-холл . п. 200.
  3. ^ Макилрой, доктор медицины (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Лаборатории Белла. 139.
  4. ^ "(stdio.h) — Справочник по C++". С++ . Проверено 25 июля 2021 г.
  5. ^ stdio.h  - Справочник базовых определений, Единая спецификация UNIX , версия 4 от Open Group.
  6. ^ «Sfio: безопасная/быстрая библиотека ввода-вывода» . Архивировано из оригинала 11 февраля 2006 года . Проверено 16 марта 2021 г.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  7. ^ Корн, Дэвид Г .; Во, Кием-Фонг (1991). SFIO: безопасный/быстрый строковый/файловый ввод-вывод . Учеб. Летняя конференция USENIX. CiteSeerX 10.1.1.51.6574 . 
  8. ^ Фаулер, Гленн С.; Корн, Дэвид Г.; Во, Кием-Фонг (2000). Расширенное форматирование с помощью Sfio . Учеб. Летняя конференция USENIX.

Внешние ссылки