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 ) { char buffer [ 5 ]; ФАЙЛ * fp = fopen ( "myfile" , "rb" );          если ( fp == NULL ) { perror ( "Не удалось открыть файл \" myfile \" " ); return EXIT_FAILURE ; }         если ( fread ( buffer , 1 , 5 , fp ) < 5 ) { fclose ( fp ); fputs ( "Произошла ошибка при чтении файла. \n " , stderr ); return EXIT_FAILURE ; }              fclose ( fp ); printf ( "Прочитано байтов: " ); for ( int i = 0 ; i < 5 ; ++ i ) { printf ( "%02X" , buffer [ i ]); } putchar ( '\n' );               вернуть EXIT_SUCCESS ; } 

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

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

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

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

Ссылки

  1. ^ Спецификация ISO/IEC 9899:1999 . стр. 274, § 7.19.
  2. ^ Керниган, Брайан ; Пайк, Роб (1984). Среда программирования UNIX . Englewood Cliffs : Prentice Hall . стр. 200. Bibcode :1984upe..book.....K.
  3. ^ Макилрой, МД (1987). Исследовательский ридер Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (Технический отчет). CSTR. Bell Labs. 139.
  4. ^ "(stdio.h) - Справочник по C++". C++ . Получено 25 июля 2021 г. .
  5. ^ stdio.h  – Справочник базовых определений, Единая спецификация UNIX , версия 4 от The Open Group
  6. ^ "Sfio: A Safe/Fast I/O Library". Архивировано из оригинала 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.

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