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

45) Основы файловой системы. Стандартные потоки. Указатель файла. Открытые файлы. Закрытые файлы. (в2б15)

Основным понятием, связанным с информацией на внешних устройствах ЭВМ, является понятие файла. Всякая операция ввода/вывода трактуется как операция обмена с файлами: Ввод- это чтение из файла в оперативную память; вывод - это запись из оперативной памяти в файл. Сначала нужно открыть поток перед выполнением каких-либо операций ввода/вывода, затем выполнить операции доступа (чтения/записи) и потом закрыть. Файл - это байтовая последовательность, заканчивающаяся EOF.

1.Стандартные потоки

С началом работы любой программы открываются пять стандартных потоков:

stdin - поток стандартного ввода;

stdout - поток стандартного вывода;

stderr - вывод сообщений об ошибках.

Кроме того открывается поток для стандартной печати и дополнительный поток для последовательного порта.

2. Указатель файла

Работа с файлами начинается с объявления указателя на поток:

FILE *имя_указателя;

FILE *fp;

FILE внутренняя C-структура данных языка Си,которая используется для работы с потоками и определена в stdio.h. Стуктура FILE содержит следующую информацию: указатель на буфер, указатель текущей позиции в потоке.

3. Открытие файла

Открыти файла возможно при помощи функции fopen(), синтаксис которой следующий:

FILE *fopen(char *name, char *mode)

fopen возвращает указатель на структуру FILE. Строка name содержит имя файла. Строка mode определяет способ доступа. Если файл не может быть открыт по какой-либо причине, функция возвращает NULL.

Способы доступа включают:

"r" - чтение,

"w" - запись,

"a" - добавление в конец.

Также способ доступа может включать:

"t" - текстовый,

"b" - бинарный.

Для открытия файла myfile.dat на чтение необходимо:

FILE *stream, *fopen();

/* описание потока и прототипа fopen */

stream = fopen("myfile.dat","r");

Необходимо проверять, что файл открылся:

if ((stream = fopen("myfile.dat", "r")) == NULL)

{ printf("Нельзя открыть %s\n", "myfile.dat");

exit(1); }

4. Закрытие файла

Для того, чтобы закрыть файл, используется функция fclose. Ее синтаксис:

fclose(FILE *stream)

Пример. Ввести матрицу из файла inputfile.dat.

Файл входных данных имеет следующую структуру:

n - количество строк

m - количество столбцов

a a ... a

...

a a ... a,

где

n - количество строк

m - количество стобцов

a - элементы матрицы.

И вывести ее в файл outputfile.dat.

#include <stdio.h> void main(){ int A[100][100]; // массив 100х100 int i,j; // индексы для перемещения по массиву int n; // кол-во строк int m; // кол-во столбцов FILE *fp; // открытие файла на чтение if ((fp = fopen("inputfile.dat", "r")) == NULL) { printf("Нельзя открыть %s\n", "inputfile.dat"); return; } // ввод размеров матрицы fscanf(fp,"%d",&n); fscanf(fp,"%d",&m); // ввод значений матрицы for(i=0;i<n;i++) for(j=0;j<n;j++){ fscanf(fp,"%d",&A[i][j]); } fclose(fp); // открытие файла на запись if ((fp = fopen("outputfile.dat", "w")) == NULL) { printf("Нельзя открыть %s\n", "outputfile.dat"); return; } // вывод значение матрицы for (i=0;i<n;i++){ for (j=0;j<n;j++) fprintf(fp,"%d ",A[i][j]); fprintf(fp,"\n"); } fclose(fp); }

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]