Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
При последовательном доступе обмен информации производится через специальный буфер, резервируемый системой ввода-вывода. Компиляция языка СИ рассматривает ввод-вывод как поток файлов, которые поступают последовательно, байт за байтом. Каждый поток связывается с файлом на магнитном диске или с файлом, который поставлен в соответствии физическому устройству, например клавиатуре. Связь потока с файлом устанавливается при его открытии. Открытие файла осуществляется функцией fopen. Данная функция возвращает указатель на файл. Указатель на файл необходимо объявлять, например:
FILE * lst;
Здесь FILE-имя типа, описанное в стандартном определении stdio.h;
lst-указатель на файл (логическое имя).
Обращение к функции fopen в программе производится так:
lst= fopen (физическое имя файла, вид использования файла);
Физическое имя файла может, например, быть “prn”-для устройства печати;
“D:zni.f”-для файла zni.f на диске D:
Вид исполнения.
Если файл открывается для записи или дополнения, но ещё не существует, то он создаётся. Открытие существующего файла для записи приводит к уничтожению его старого содержимого. Попытка прочитать несуществующий файл-это ошибка (fopen выдаёт указатель со значением NULL).
Для работы с файлами используются библиотечные функции fprintf, fscanf, fgets, fputs. Их применение рассмотрим ниже на примерах. После окончания работы с файлом он должен быть закрыт. Это делается с помощью библиотечной функции fclose, например:
fclose (lst)
lst-указатель на файл;
Рассмотрим организацию ввода информации на печатающее устройство:
/*Работа с файлами (вывод на печатающее устройство)*/
#include<stdio.h>
main ()
{ int i = 150;
FILE *lst;
/*lst-указатель на файл (объект типа FILE)*/
lst= fopen (“prn”,”w”);
/*lst получает адрес открытого файла с именем prn, предназначенного для записи в него информации (символ w);
prn-стандартное имя устройства печати, информация из файла с адресом lst будет выводится на печатающее устройство*/
fprintf(lst,”\n число i = %d\n”,i);
/*первый параметр функции fprintf-это указатель на соответствующий файл; на печать будет выведена строка: число i = 150*/
fclose (lst);
/*функция fclose закрывает файл с указателем lst теперь ссылку lst можно использовать для другого файла */
Функция fprintf подобна функции printf и отличается от неё тем, что в качестве первого параметра использует указатель на соответствующий файл.
Следующая программа показывает организацию вывода информации на дискету:
/* Работа с файлами (запись информации в файл на дискету)*/
#include < stdio.h >
main ()
{ int i = 150
FILE *rsd;
Rsd=fopen(“B:ZNI.F”,”r ”);
/*второй параметр функции fopen-теперь “r ”,говорящий о чтении информации*/
fscanf(rsd,”%d”,&i);
/*из файла ZNI.F(дискета В:) будет прочитано значение i*/
printf(“число i=%d(начальное значение i)\n”,i);
while (fscanf(rsg,”%d”,&i)!=EOF)
printf(“число i = %d\n,i”);
/*последовательный вывод целых чисел из файла; вывод прекращается, когда будет достигнут конец файла(ЕОF)*/
fclose(rsd);
}
Первая функция fscanf обеспечивает чтение из файла B:ZNI.F значение целого числа i. Затем полученное значение выводится функцией printf на экран дисплея. Последующий фрагмент программы (начиная с оператора while) позволяет вывести другие целые числа из этого файла, если их там не более одного. После того как чисел в файле не остаётся, функция fscanf выдаёт особое значение EOF-признак конца файла. Его можно использовать для прекращения чтения информации.
Добавим в файл ZNI.F новые данные:
/*Работа с файлами (дополнение файла на дискете)*/
#include < stdio.h >
main ()
{ int c;
FILE * lds;
lds = fopen(“B:ZNI.F”,”a”);
/*Второй параметр функции fopen – теперь “а”, говорящий о возможности дополнения файла*/
puts (“введите целое число”);
scanf (“%d”,&c);
fprintf (lds,”%d\n”,c);
/*файл ZNI.F будет дополнен первым числом*/
fclose (lds);
}
В ответ на сообщение “введите целое число” необходимо ввести его, и файл добавится одним числом. Если необходимо добавить в файл несколько данных, можно организовать цикл.
С началом работы любой программы автоматически открываются три файла, и для них определяются соответствующие указатели. Первый из них-это файл для стандартного ввода информации с клавиатуры с указателем stdin, второй – для стандартного вывода информации на экран дисплея с указателем stdout, третий – для стандартного вывода ошибок на экран дисплея с указателем stderr. Объекты stdin, stdout, stderr – константы, а не переменные, и им нельзя что-либо присваивать. Файл с указателем stderr обычно используется для хранения различных диагностических сообщений.
Рассмотрим ввод и запись строк в файл. Продемонстрируем вывод информации в стандартный файл для ошибок:
/*Работа с файлами (ввод и запись строк). Вывод информации в стандартный файл для ошибок*/.
#include <stdio.h>
main ()
{ char str[50];
FILE *FL
FL=fopen (“FAL.F”, “w”);
puts (“Введите строку (до 49 символов)”);
scanf (“%s”, str);
fputs (str, FL);
/* Функция fputs записывает в файл строку str*/
fprintf (stderr, “Демонстрация вывода в стандартный файл для ошибок ”);
/* текст в функции fprintf будет выведен на экран*/
fclose (FL);
FL=fopen (“FAL.F”, “r”);
/* Файл открывается для чтения */
fgets (str, 20, FL);
/* функция fgets считывает из файла FAL.F строку str, максимальная длина которой 20-1=19 (20- второй параметр fgets); получившаяся строка оканчивается символом ‘\0’*/
printf (“str = %s”, str);
fclose (FL);
}
После запуска программы на выполнение необходимо ввести строку до 49 символов. На экране появится:
Дата публикования: 2014-11-28; Прочитано: 1550 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!