Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебно-практическое пособие ПРОГ.doc
Скачиваний:
40
Добавлен:
20.11.2019
Размер:
5.63 Mб
Скачать

4.6.Другие функции ввода-вывода

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

4.6.1.Функции посимвольного ввода-вывода

  1. Int fgetc(file *f); - ввести один символ из файла f.

Функция fgetc вводит один символ из файла f. Если ошибок нет, то fgetc возвращает код введенного символа, в противном случае - константу EOF равную минус единице.

  1. Int fputc(int c, file *f); - записать один символ в файл f.

Функция fputc записывает один символ в файл f. Если ошибок нет, то fputc возвращает код выведенного символа, в противном случае - константу EOF.

4.6.2.Функции построкового ввода-вывода

  1. Char *fgets(char *line,int size, file *f); - ввести строку из файла f.

Функция fgets вводит из файла f очередную строку и записывает ее в массив символов line. Второй аргумент size указывает размер массива для записи строки. Максимальная длина строки на единицу меньше, чем size, поскольку всегда в конец считанной строки добавляется завершающий (терминирующий) нулевой символ (нулевой байт). Функция сканирует файл до тех пор, пока не встретит символ перевода строки "\n" или пока число введенных символов не станет равным size - 1. Символ перевода строки "\n" также записывается в массив непосредственно перед терминирующим нулевым байтом. Функция возвращает указатель line в случае успеха или нулевой указатель при ошибке или конце файла.

  1. Char *fputs(char *line, file *f); - записать строку в файл f.

Функция fputs записывает в файл f содержимое строки, адресуемой указателем line. При этом завершающий нулевой символ не записывается.

4.6.3.Функции позиционирования в файле

  1. Int fseek(file *f, long offset, int whence); - установить текущую позицию в файле f

При выполнении файловых операций исполняющая система поддерживает указатель текущей позиции в файле. При чтении или записи n байтов указатель текущей позиции увеличивается на n; таким образом, чтение или запись происходят последовательно. Библиотека ввода-вывода Си позволяет позиционировать указатель текущей позиции в произвольную точку файла. Для этого используется функция fseek. Первый аргумент f функции определяет файл, для которого производится операция позиционирования. Второй аргумент offset задает смещение в байтах, оно может быть как положительным, так и отрицательным. Третий аргумент whence указывает, откуда отсчитывать смещение. Он может принимать одно из трех значений, заданных как целые константы в стандартном заголовочном файле "stdio.h":

  • SEEK_CUR - смещение отсчитывается от текущей позиции

  • SEEK_SET - смещение отсчитывается от начала файла

  • SEEK_END - смещение отсчитывается от конца файла

Например,

fseek(f, 0, SEEK_SET); - устанавливает текущую позицию в начало файла.

fseek(f, -4, SEEK_END); - устанавливает текущую позицию в четырех байтах перед концом файла.

fseek(f, 12, SEEK_CUR); - продвигает текущую позицию на 12 байтов вперед.

Отметим, что смещение может быть положительным даже при использовании константы SEEK_END (т.е. при позиционировании относительно конца файла): в этом случае при следующей записи размер файла соответственно увеличивается.

Функция возвращает нулевое значение в случае успеха и отрицательное значение EOF (равное -1) при неудаче - например, если указанное смещение некорректно при заданной операции или если файл не позволяет выполнять прямое позиционирование.