Базовые конструкции языка.




Теоретическая часть

Язык Си является одним из первых языков высокого уровня (1978 год), который изначально создавался для написания операционных систем (ОС) и компиляторов. Первой написанной ОС на языке Си была система UNIX компании Bell, которую позже наследовала система Linux. После нескольких обновлений диалекта языка «K&R» С (1978), ANSI C (1989), C90, C99, C11 он до сих является одним из самых популярных языков программирования в мире. По данным индекса TIOBE на сентябрь 2018 года он занимает 2-е место по популярности (https://www.tiobe.com/tiobe-index/) уступая только языку Java.

Работа с файлами.

Основной особенностью языка Си является наличие механизма указателей. Указатели — это универсальный способ получить доступ к конкретному участку памяти, будь то оперативная память, постоянная память или даже внешний интерфейс компьютера.

Таким образом, для того чтобы совершать чтение из файла и запись данных в файл, сначала необходимо создать указатель на него:

 

FILE* pfile;

 

Тип данных FILE как и функции для работы с файлами содержатся в стандартной библиотеки ввода и вывода stdio.h.

Открытие существующего файла, либо создание нового файла осуществляется с помощью следующей функции:

 

pfile = fopen("имя_файла", "r");

 

Вторым аргументом функции является модификатор доступа к файлу:

Режим Значение
"r" Создает файл для записи (по умолчанию файл открывается как текстовый).
"w" Создает файл для записи (по умолчанию файл открывается как текстовый).
"а" Дописывает информацию к концу файла (по умолчанию файл открывается как текстовый).
"rb" Открывает двоичный файл для чтения.
"wb" Создает двоичный файл для записи.
"ab" Дописывает информацию к концу двоичного файла.
"r+" Открывает файл для чтения/записи (по умолчанию файл открывается как текстовый).
"w+" Создает файл для чтения/записи (по умолчанию файл открывается как текстовый).
"а+" Дописывает информацию к концу файла или создает файл для чтения/записи (по умолчанию открывается как текстовый файл).
"r+b" Открывает двоичный файл для чтения / записи.
"w+b" Создает файл для чтения / записи.
"а+b" Дописывает информацию к концу файла или создает двоичный файл для чтения.
"rt" Открывает текстовый файл для чтения.
"wt" Открывает текстовый файл для записи.
"at" Дописывает информацию к концу текстового файла.
"r+t" Открывает текстовый файл для чтения/записи.
"w+t" Создает текстовый файл для чтения/записи.
"a+t" Открывает или создает текстовый файл для чтения/записи.

Если функции fopen() удалось открыть указанный файл, возвращается указатель на FILE. Если же файл не может быть открыт, возвращается NULL.

После удачного открытия файла на чтение можно считывать данные из него. Файловая система ANSI С предоставляет две функции, позволяющие читать и писать блоки данных - fread() и fwrite(). Они имеют следующие прототипы:

 

size_t fread(void *буфер, size_t число_байту size_t объем, FILE *fp);

size_t fwrite(const void *буфер, size_t число_байт, size_t объем, FILE *fp);

 

В случае fread() буфер — это указатель на область памяти, которая получает данные из файла. В случае fwrite() буфер - это указатель на информацию, записываемую в файл. Длина каждого элемента в байтах определяется в число_байт. Аргумент объем определяет, сколько элементов (каждый длиной число_байт) будет прочитано или записано. Наконец, fp - это файловый указатель на ранее открытый поток (pfile).

Функция fread() возвращает число прочитанных элементов. Данное значение может быть меньше, чем объем, если был достигнут конец файла или произошла ошибка. Функция fwrite() возвращает число записанных элементов. Данное значение равно объем, если не возникла ошибка.

Если файл был открыт для двоичных данных, то fread() и fwrite() могут читать и писать любой тип информации.

Зададимся вопросом: "Что надо сделать после того, как мы поработали с файлом?"

Формальный ответ: "Закрыть файл." Это можно сделать с помощью функции:

 

fclose(pfile);

 

Но зачем это делать?

Ввиду механического устройства жесткого диска, данные в файл попадают не сразу. Сначала данные записываются в так называемый буфер (область оперативной памяти), и когда он переполнится, то данные из буфера будут записаны в файл. Такая схема придумана для ускорения работы с файлами. На самом деле, буфер — это поле структуры FILE: указатель на массив char'ов.

Если мы напишем fread(...), то запись произведется в буфер. И только тогда, когда буфер будет заполнен до конца, он будет сразу весь записан на жесткий диск. По этой причине, если мы не закроем файл функцией fclose(pfile), то последние данные из буфера не запишутся в файл. Отсутствие этой команды может привести к потере данных в файле, который был открыт для записи (дозаписи).

А зачем закрывать файлы, открытые только на чтение?

Если не закрывать файлы (которые открыты даже для чтения), то это может привести к ограничению доступа к файлу для других программ. Какие именно ограничения наложатся — это зависит от ОС. Но в ОС Windows если файл открыт на чтение и не закрывается, то из другой программы его нельзя удалить.

В любой ОС есть ограничение на количество одновременно открытых файлов. И это еще одна причина для закрытия файлов.

 

Базовые конструкции языка.

При написании программы в курсовой работе необходимо уметь использовать следующие базовые конструкции языка Си:

Создание переменной некоторого типа данных и последующее присваивание значения, например:

int a;

a = 5;

либо инициализация переменной в момент создания:

int a = 5;

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2019-07-29 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: