Из Википедии, свободной энциклопедии
  (Перенаправлено с Fprintf )
Перейти к навигации Перейти к поиску

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

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

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

Обзор [ править ]

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

Функции [ править ]

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

Константы [ править ]

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

Переменные [ править ]

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

Типы участников [ править ]

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

  • ФАЙЛ - также известный какдескриптор файла , это непрозрачный тип, содержащий информацию о файле или текстовом потоке, необходимую для выполнения операций ввода или вывода с ним, включая:
    • зависящий от платформы идентификатор связанного устройства ввода-вывода, например файловый дескриптор
    • буфер
    • индикатор ориентации потока (неустановленный, узкий или широкий)
    • индикатор состояния буферизации потока (без буферизации, с буферизацией по строке, с полной буферизацией)
    • Индикатор режима ввода-вывода (входной поток, выходной поток или поток обновления)
    • индикатор двоичного / текстового режима
    • индикатор конца файла
    • индикатор ошибки
    • текущая позиция в потоке и состояние многобайтового преобразования (объект типа mbstate_t)
    • возвратная блокировка (требуется с C11 )
  • fpos_t - тип без массива, способный однозначно определять позицию каждого байта в файле и каждое состояние преобразования, которое может произойти во всех поддерживаемых кодировках многобайтовых символов.
  • size_t - беззнаковый целочисленный тип, являющийся типом результата оператора sizeof .

Расширения[ редактировать ]

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

Пример [ править ]

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

#include  <stdio.h>#include  <stdlib.h>int  main ( void )  {  буфер символов  [ 5 ]; ФАЙЛ * fp = fopen ( "myfile" , "rb" );      if  ( fp  ==  NULL )  {  perror ( "Не удалось открыть файл \" myfile \ " " );  вернуть  EXIT_FAILURE ;  } для  ( int  я  =  0 ;  я  <  5 ;  я ++ )  {  int  rc  =  getc ( fp );  if  ( rc  ==  EOF )  {  fputs ( "Произошла ошибка при чтении файла. \ n " ,  stderr );  вернуть  EXIT_FAILURE ;  }  буфер [ я ]  =  rc ;  } fclose ( fp ); printf ( "Считанные байты были ...% x% x% x% x% x \ n " ,  buffer [ 0 ],  buffer [ 1 ],  buffer [ 2 ],  buffer [ 3 ],  buffer [ 4 ]); вернуть  EXIT_SUCCESS ; }

Альтернативы stdio[ редактировать ]

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

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

См. Также [ править ]

  • строка формата printf
  • строка формата scanf

Ссылки [ править ]

  1. ^ ISO / IEC 9899: 1999 спецификация (PDF) . п. 274, § 7.19.
  2. ^ Керниган, Брайан ; Пайк, Роб (1984). Среда программирования UNIX . Энглвудские скалы : Прентис-холл . п. 200.
  3. Перейти ↑ McIlroy, MD (1987). Читатель Research Unix: аннотированные выдержки из Руководства программиста, 1971–1986 (PDF) (технический отчет). CSTR. Bell Labs. 139.
  4. ^ http://www.cplusplus.com/reference/cstdio/
  5. ^ stdio.h  - Справочник по базовым определениям, Единая спецификация UNIX , выпуск 7 от Open Group
  6. ^ SFIO: Библиотека безопасного / быстрого ввода-вывода на Wayback Machine (архивировано 11 февраля 2006 г.)
  7. ^ Корн, Дэвид Г .; Во, Кием-Фонг (1991). SFIO: безопасный / быстрый ввод-вывод строки / файла . Proc. Летняя конференция USENIX. CiteSeerX 10.1.1.51.6574 . 
  8. ^ Фаулер, Гленн С .; Корн, Дэвид Дж .; Во, Кием-Фонг (2000). Расширенное форматирование с помощью Sfio . Proc. Летняя конференция USENIX.

Внешние ссылки [ править ]

  • СМИ, относящиеся к вводу / выводу файлов C на Викискладе?