Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Файлы последовательного доступа



При последовательном доступе обмен информации производится через специальный буфер, резервируемый системой ввода-вывода. Компиляция языка СИ рассматривает ввод-вывод как поток файлов, которые поступают последовательно, байт за байтом. Каждый поток связывается с файлом на магнитном диске или с файлом, который поставлен в соответствии физическому устройству, например клавиатуре. Связь потока с файлом устанавливается при его открытии. Открытие файла осуществляется функцией 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...