Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Информатика 1.docx
Скачиваний:
11
Добавлен:
26.09.2019
Размер:
364.88 Кб
Скачать

Функции fprintf() и fscanf().

Функции fprintf() и fscanf() полностью аналогичны функциям printf() и scanf(), но используются для форматированного ввода-вывода при работе с файлами. Дополнительный параметр stream идентифицирует сессию работы с файлом (об этом ниже):

int fprintf (FILE* stream, const char* FormatString, [arg1, arg2,]…);

int fscanf(FILE* stream, const char* FormatString, [void* arg1, void* arg2,]…);

Функции неформатированного ввода-вывода.

char *gets( char *buffer );

Ввод строки с клавиатуры. Вводимая строка должна заканчиаться символом перевода строки (нажатием клавиши Enter), который функция gets() заменяет на терминирующий ноль.

int getch( void );

Ввод 1 символа с клавиатуры. Функция ожидает нажатие любой клавиши и возвращает ASCII-код введённого символа. Если была нажата спецклавиша (функциональная клавиша, стрелка и т.п.), то getch вернёт 0, это означает, что нужно ещё раз вызвать эту функцию для получения кода, описывающего нажатую клавишу.

int getchar( void );

Эквивалент getch()

int puts( const char *string );

Вывод строки на экран.

int putch( int c );

Вывод символа на экран.

int putchar( int c );

Эквивалент putch().

char *fgets( char *string, int n, FILE *stream );

Аналогично gets(), но работает с файлами.

int getc( FILE *stream );

Аналогично getch(), но работает с файлами.

int fgetc( FILE *stream );

Эквивалент getc();

int fputs( const char *string, FILE *stream );

Аналогично puts(), но работает с файлами.

int putc( int c, FILE *stream );

Аналогично putch(), но работает с файлами.

int fputc( int c, FILE *stream );

Эквивалент putc();

Все вышеперечисленные функции объявлены в stdio.h, за исключением getch() и putch(), описанных в conio.h.

  1. Работа с файлами. Функции стандартной библиотеки по работе с файлами. Режимы работы с файлами.

Функции работы с файлами.

Библиотека языка С поддерживает 3 уровня ввода-вывода:

  • Потоковый ввод-вывод.

  • Ввод-вывод нижнего уровня.

  • Прямой аппаратный ввод-вывод (самый нижний уровень, системно зависимый, например работа с портами процессора).

В данном курсе мы будем рассматривать только первые 2 уровня, причём наибольшее внимание уделим потоковому вводу-выводу. Функции ввода-вывода нижнего уровня похожи на функции потокового ввода-вывода, но покрывают только часть функциональности, правда, при этом работают быстрее (что можно заметить только при работе с очень большими объёмами данных).

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

Потоковый ввод-вывод

Строго говоря, к функциям потокового ввода-вывода относятся как функции работы с файлами, рассматриваемые в этом разделе, так и функции вывода на монитор и считывания данных с клавиатуры, рассмотренные в предыдущем разделе.

На уровне потокового ввода-вывода обмен данными произ­водится побайтно. Такой ввод-вывод возможен как для собст­венно устройств побайтового обмена (печатающее устройство, дисплей), так и для файлов на диске. Хотя устройства внешней памяти, строго говоря, являются устройствами поблочного об­мена, т.е. за одно обращение к устройству производится считывание или запись фиксированной порции данных, операционная система и драйвер устройства имитируют побайтовый обмен.

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

Функции библиотеки ввода-вывода языка C, поддержи­вающие обмен данными с файлами на уровне потока, позволяют обрабатывать данные различных размеров и форматов, обеспе­чивая при этом буферизованный ввод и вывод. Таким образом, поток - это файл вместе с предоставляемыми средствами буфе­ризации.

При работе с потоком можно производить следующие дейст­вия:

  • открывать и закрывать потоки (связывать указатели на по­токи с конкретными файлами);

  • вводить и выводить: символ, строку, форматированные данные, порцию данных произвольной длины;

  • анализировать ошибки потокового ввода-вывода и условие достижения конца потока (конца файла);

  • управлять буферизацией потока и размером буфера;

  • получать и устанавливать указатель (индикатор) текущей позиции в потоке.

Для того чтобы можно было использовать функции библио­теки ввода-вывода языка Си, в программу необходимо включить заголовочный файл stdio.h (#include <stdio.h>), который содер­жит прототипы функций ввода-вывода, а также определения констант, типов и структур, необходимых для работы функций обмена с потоком.