Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Си_3.doc
Скачиваний:
3
Добавлен:
25.08.2019
Размер:
192 Кб
Скачать

Классификация функций ввода-вывода верхнего уровня

Все функции ввода-вывода верхнего уровня могут быть разделены:

  1. доступа к файлам: открытия и закрытия файлов;

  2. бесформатного ввода-вывода в текстовые файлы:

    • посимвольного ввода-вывода;

    • построчного ввода-вывода;

  3. форматного ввода-вывода в текстовые файлы;

  4. ввода-вывода записями;

  5. анализа положения и управления положением указателя;

  6. обработки ошибок.

Назначение функций

Имена функций

Доступ к файлам

fopen, freopen, fclose, fcloseall

Анализ положения указателя

feof

Управление положением указателя

fseek

Ввод-вывод данных потоком

Посимвольный ввод

getch, getchar, getc, fgetc

Посимвольный вывод

putch, putchar, putc, fputc

Посимвольный возврат

ungetc, ungetch

Построчный ввод

gets, fgets, getpass

Построчный вывод

puts, fputs

Форматный ввод

scanf, fscanf, sscanf, cscanf

Форматный вывод

printf, fprintf, sprintf

Ввод-вывод данных записями

Ввод записей

fread

Вывод записей

fwrite

Ключевые слова имён функций для ввода-вывода данных потоком:

get - бесформатный ввод данных;

put - бесформатный вывод данных;

scanf - форматный ввод данных;

printf - форматный вывод данных.

Правила формирования имён функций ввода-вывода данных потоком

  1. функции посимвольного ввода-вывода - c добавляется справа: getc, fgetc, putc, fputc;

  2. функции построчного ввода-вывода - s добавляется справа: gets, fgets, puts, fputs;

  3. функции форматного ввода-вывода - f добавляется справа: scanf, fscanf, printf, fprintf;

  4. функции ввода-вывода данных из файла - f добавляется слева: fgetc, fprintf; без f – с терминала;

  5. функции пересылки данных в ОП – из строки в переменные списка данных или наоборот: sscanf, sprintf.

Операции ввода и вывода данных в поток начинаются с текущей позиции, определённой указателем файла в потоке. Значение указателя файла изменяется после каждого выполнения операции чтения или записи данных.

Например, при чтении или записи символа указатель смещается в потоке на один байт (1 позиция). Если поток открыт для дополнения файла, указатель файла автоматически устанавливается на конец файла. Терминал не имеет указателя файла.

Обработка ошибок ввода-вывода

Для обработки ошибок ввода-вывода при работе с файлами можно использовать функции perror, ferror и clearer.

Открытие, закрытие и удаление файлов

Открытие файла связывает его с соответствующей структурой типа FILE. ОС автоматически открывает стандартные файлы и устройства. Открытие и закрытие файлов пользователем производится с помощью встроенных функций. Используются функции fopen, freopen, fclose, fcloseall.

Открытие потока производится функцией fopen.

Прототип функции:

FILE *fopen(char *filename, char *type);

где filename определяет полное имя физического файла на магнитном диске; это может быть указатель-константа, указатель-переменная строки или строковая константа, которая содержит имя физического файла;

type определяет способ (режим) доступа к файлу.

Способ доступа

Назначение способа доступа – открыть файл для:

“r”

- read – чтения; файл должен быть уже создан

“w”

-write – записи; если был файл с тем же именем, то он стирается при открытии файла

“a”

- append – дополнения записей в конец файла; если файла нет, то он создаётся

“+”

– допускается чтение из файла и запись в файл

Допустимые значения способов доступа

Пример Открытие файлов

fid = fopen (“lr2.dat”, “r”); - для чтения;

fin = fopen (filename, “a+”); - для чтения и дополнения;

frz = fopen (“con”, “w”); - для вывода данных на экран;

Имя физического файла “con” определяет консоль.

Если файл открыт с режимом “a” или “a+”, то данные записываются в конец файла, даже если указатель файла был перемещён от конца файла с помощью функций fseek или rewind: при записи в файл указатель перемещается в конец файла. Таким образом, имеющиеся данные файла не могут быть стёрты.

Для режимов “r+”, “w+” и “a+” разрешены чтение и запись, так как файл открыт для обновления (update).

Для текстового режима в строке type должен быть символ ‘t’, для бинарного – ‘b’. Например, “wb”. Если в строке нет ни ‘t’, ни ‘b’, то по умолчанию принимается значение глобальной переменной fmode. В Си fmode определяет текстовый режим. При вводе данных с клавиатуры команда Ctr+z интерпретируется как символ конца файла.

Если открытие файла успешно, функция fopen возвращает значение – указатель на переменную типа FILE и связывает файл программы с физическим файлом. Если открытие файла не состоялось (например, файл с таким именем не найден), функция fopen возвращает значение NULL. Успешность открытия файла можно поверить с помощью оператора if.

После открытия файла можно увидеть в окне просмотра значения, полученные переменными-указателями типа FILE.

Пример Окно просмотра после открытия файлов

fr : DS: 0BBC// После успешного открытия файла

fid : DS: NULL // После неуспешного открытия файла

Функция fclose закрывает один заданный поток (файл).

Функция fcloseall закрывает все потоки (файл), открытые функцией fopen, кроме потоков stdin, stdout, stderr.

Прототипы этих функций:

int fclose (FILE *stream );

int fcloseall ( );

Пример Закрытие файлов

fclose (fid ); fclose (res);

fcloseall ( );

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

Функция fclose возвращает значение 0, если поток успешно закрыт. Функция fcloseall возвращает количество закрытых потоков. Если при закрытии произошла ошибка, обе функции возвращают значение EOF (-1).

С помощью функции remove можно удалить файл.

Прототип этой функции:

int remove (const char *filename);

где filename – указатель на строку с именем файла.

Функция remove возвращает значение 0 при успешном удалении файла и не 0 при неуспешном удалении. Если файл был открыт, для удаления его надо предварительно закрыть. Если закрытие неуспешно, с помощью функции perror можно вывести сообщение об ошибке.