МУ_ЛР7_ОП (1079938), страница 2

Файл №1079938 МУ_ЛР7_ОП (Методические указания к лабораторным работам) 2 страницаМУ_ЛР7_ОП (1079938) страница 22018-01-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

FILE *stdin; // Стандартный ввод данных, умолчание клавиатура

FILE *stdout; // Стандартный вывод данных, умолчание экран монитора

FILE *stderr; // Стандартный вывод информацмм об ошибках, умолчание экран монитора

Где FILE специальная структура для работы с файлами. В частности в нее записывается уникальный дескриптор (см. ниже) открытого файла.

7 Имена и расширения файлов

В файловой системе компьютера файлы хранятся в каталогах, размеры которых ограничены только физическими возможностями жестких дисков (HDD). В разных каталогах могут быть записаны одноименные файлы, наличие файлов с одинаковыми именами в одном каталоге недопустимо. Суммарный размер хранимых файлов не может превышать размер физического жесткого диска.

Имя конкретного файла в ОС задается текстовой строкой в формате:

<имя файла>[.<расширение имени файла>]

Имя файла – это основное название файла, необходимое для поиска и использования файла. Расширение имени файла (необязательная часть) указывает на тип файла, его структуру и может быть использовано в программах для контроля содержания файла. Ранее в операционных системах и файловых системах старого поколения для имени файла можно было выделить до 8-ми символов, а по расширение до 3-х символов (структура “8.3”). В настоящее время ограничения на длину файла и его расширения практически сняты: сначала до 32 символов (FAT32), а затем до 255 символов (NTFS). В ОС типа Unix допустимый размер имени файла еще выше, хотя, отметим, практически это редко используется.

Примеры имен файлов приведены выше:

Winword.exe – имя программы MS WORD,

Отчет по ЛР студента Петрова группы ИУ5-31.DOC – имя документа,

Баллада о детстве - В.Высоцкий.mp3” – имя звукового файла,

DATABASE.MDB – файл БД MS Access.

Sample.txt – двоичный текстовый файл.

Пример – имя файла без расширения.

В кавычках взяты длинные имена файлов, в которых присутствуют пробелы.

8 Открытие и закрытие файлов

Для работы с файлом программа и ОС должны проверить следующее:

  • существует ли файл с заданным именем в указанном каталоге,

  • доступен ли он для работы в программе, и в каких допустимых режимах,

  • не занят ли файл в данное время другой задачей, если система многозадачная,

  • и т.д.

Такие действия выполняются специальными командами и функциями, которые под управлением ОС, и называются открытием файла (open file). Если файл успешно открыт, то он становиться доступным для работы в программе в заданном режиме. Если файл не открыт, то необходимо искать ошибку открытия и ее причину. После успешного открытия файла ОС выделяет для этого файла специальный дескриптор файла (передает в программу в структуру FILE) и специальный блок описания файла (FCB – File Control Block). Блок FCB – операционная система использует для контроля использования файла.

После работы с файлом он должен быть закрыт. Ос освобождает файл для дальнейшего использования, удаляет блок FCB. Функции библиотеки ввода и вывода fclose и _close и другие применяют для открытия файлов. Функция открытия файлов имеет следующий прототип:

FILE *fopen( <Имя файла>, <Режим открытия файла>);

Имя файла мы уже обсуждали, оно задается строкой, а режим открытия файлов может быть задан так:

"r" - открыть текстовый файл только для чтения, если файла нет то ошибка.

"w" - открыть или создать текстовый файл для записи, для созданных файлов содержимое очищается.

"a" - открыть текстовый файл для добавления записей в его конец, файл создается, если он не был создан.

"rb" - открыть ,бинарный файл только для чтения, если файла нет то ошибка.

"wb" - открыть или создать бинарный файл для записи, для созданных файлов содержимое очищается.

"ab" - открыть бинарный файл для добавления записей в его конец, файл создается, если он не был создан.

"r+" - открыть текстовый файл для чтения и записи, если файла нет то ошибка.

"w+"- открыть или создать текстовый файл для чтения и записи, для созданных файлов содержимое очищается.

"a+" - открыть текстовый файл для чтения записей или добавления записей в его конец, файл создается, если он не был создан.

"r+b" - открыть бинарный файл для чтения и записи, если файла нет то ошибка.

"w+b"- открыть или создать бинарный файл для чтения и записи, для созданных файлов содержимое очищается.

"a+b" - открыть бинарный файл для чтения записей или добавления записей в его конец, файл создается, если он не был создан.

Примеры функций для открытия файлов в разных режимах:

FILE *pF; // Структура описания файлов

pF = fopen( "fputc.out" , "w+"); // Открытие текстового файла для записи и чтения

pF = fopen( "fputc.out" , "r"); // Открытие для записи

pF = fopen( "fwrite.out" , "r+b"); // Открытие двоичного файла для записи и чтения

pF = fopen( "fprintf.out" , "w+b"); // Открытие или создание двоичного файла для чтения и записи

pFBin = _open( "write.bin", _O_RDWR |_O_BINARY ); // Открытие двоичного для прямого доступа

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

fclose(pF); // закрытие текстового файла

_close( pFBin ); // закрытие бинарного/двоичного файла

9 Библиотеки и заголовочные файлы

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

#include <stdio.h> // Основная библиотека ввода и вывода Си - RTL

#include <fcntl.h> // Константы ввода и вывода

#include <io.h> // Функции низкоуровневого ввода и вывода

#include <conio.h> // Консольный ввод и вывод

#include <sys/types.h> // Константы в/в

#include <sys/stat.h> // Константы в/в

Содержание этих библиотек можно узнать: изучив документацию и литературу [ 1,2, 11], посмотреть примеры данных МУ к ЛР, или обратиться для помощи в MSDN [4] локальной и Интернет версии. Можно также открыть сам заголовочный файл (он имеет текстовый формат) и изучить его самостоятельно (!!!).

10 Основные операции и функции для работы с файлами

Операции над файлами могут быть разделены на две группы:

  • Операции на содержимом конкретного файла и

  • Операции над файлом в целом.

Для работы с содержимым файла предусматриваются следующие основные операции и функции:

  • Создание файла, обычно происходит при открытии файла (open, fopen, create).

  • Открытие файла (_open, fopen).

  • Закрытие файла (_close, fclose).

  • Операция чтения из файла (_read, fread, fgetc, fgets, fscanf).

  • Операция записи в файл (_write, fwrite, fputc, fputs, fprintf ).

  • Перемещение текущего указателя файла и его определение (fsetpos , fseek).

  • Определение конца файла (_eof, feof)

  • Получение дескриптора файла (_fileno).

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

  • Переименование файла (rename)

  • Удаление файла (remove)

  • Установка и изменение атрибутов файла (chmod, access).

  • Определение размера файла (_filelength)

  • Определение имени файла и его расположения (_fullpach, div)

  • Изменение потока (reopen)

  • Системные команды для работы с файлами (system).

Для чтения и записи используются различные возможности и функции. Работа с файлами возможна на основе стандартной библиотеки Run-Time Libraries (CRT) или библиотек потокового ввода вывода Standard C++ Library (STL). Эти библиотеки необходимо внимательно изучить и использовать при программировании. Здесь ограничимся конкретным примером для создания, чтения и записи файла. Для первого знакомства с библиотеками приводим примеры некоторых функций для работы с файлами. Комментарии в тексте примеров поясняют работу вызываемых функций ввода и вывода.

FILE *pF; // Описание указателя – дескриптора файла pF

pF= fopen("test.txt" , "w+"); // открытие файла для записи и создания

fputs("Пример вывода строки!!!" , pF); // вывод в файл строки

fclose(pF); // Закрытие файла с дескриптором pF

pF= fopen("test.txt" , "r+"); // Открытие файла для чтения

char * FBuf[200]; // Описание буфера FBuf для ввода строки из файла

fgets((char *)FBuf, 100, pF); // чтений строки из файла в FBuf

printf( "Из файла строка = %s \n", FBuf ); // вывод на консоль буфера FBuf

fclose(pF); //Закрытие файла с дескриптором pF

В различных примерах данных методических указаний (см. ниже) и контрольных заданий вы можете использовать данные примеры.

11 Уровни ввода/вывода и типы файлов

В языке программирования СИ предусматриваются, в зависимости от поставленной задачи, различные технологии (и функции) для работы с файлами. Можно выделить следующие возможности:

  • Посимвольный ввод вывод в файлах, когда текстовый файл рассматривается как одна длинная строка;

  • Ввод/вывод среднего уровня (строки), в этом случае текстовый файл рассматривается как совокупность строк;

  • Ввод/вывод верхнего уровня, текстовые файлы формируются на основе шаблонов форматированного вывода (Потоки, форматирование и буферизация);

  • Ввод/вывод нижнего уровня, в этом случае используются бинарные файлы, а представление информации задается во внутреннем представлении компьютера (работа с байтами, структурами с внутренним представлением).

  • Ввод/вывод с консоли (прямой мониторный вывод и прямой ввод с клавиатуры), а также для портов ввода и вывода (другие устройства ввода и вывода – принтер, динамик и т.д.).

12 Описание файла в программе. Структура FILE.

Для работы с файлом его дескриптор нужно описать. Выше было отмечено, что значение дескриптора формируется при открытии файла. Возможны два варианта запоминания дескриптора в зависимости от технологии работы с файлом (ввод/вывод на нижнем уровне и ввод/вывод на верхнем уровне). Для работы на верхнем уровне можем записать так:

FILE *pF; // Описание указателя pF – с дескриптором файла _file

pF= fopen("test.txt" , "w+"); // открытие файла для записи и создания

Указатель pF, если файл открыт без ошибок, может использоваться до тех пор пока файл не был закрыт. На верхнем уровне это делается так:

fclose(pF); //Закрытие файла с дескриптором pF

Структура FILE для работы с файлами в этом режиме показана ниже. Как видно из описания это имя объявлено описателем typedef.

struct _iobuf {

char *_ptr;

int _cnt;

char *_base;

int _flag;

int _file; // Дексриптор открытого файла

int _charbuf;

int _bufsiz;

char *_tmpfname;

};

typedef struct _iobuf FILE; // Задание типа структуры FILE

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

// Низкоуровневый - двоичный ввод - вывод

int pFBin = 0;

А закрытие файла выполняется следующим вызовом:

_close( pFBin ); // Низкоуровневое закрытие файла

13 Текстовые и бинарные (двоичные) файлы

Мы уже не один раз упоминали текстовые и бинарные файлы, но не уточнили, в чем заключается различие между ними. Во-первых, текстовые файлы могут быть использованы и в текстовом режиме. Главное различие текстовых и бинарных файлов заключается в способе представления цифровых данных. Символьные данные в этих двух случаях представляются одинаково. В текстовых файлах цифровые данные представляются символами, т.е. выполняется перевод в символьное представление (fprintf, itoa и др.). В бинарных файлах цифровое представление данных из оперативной памяти копируется в файл во внутреннем представлении, т.е. копируются байты, а не символьное представление данных. Различие между способами представления информации можно увидеть на совместной распечатке шестнадцатеричного и символьного представления данных. Для текстового файла такая распечатка выглядит так (целые числа представлены символьно – “31” и “32”):

Адр.: Шестнадцатеричное представление |Символьное предст.

0000: D1 F2 F0 EE EA E0 31 20| 21 21 21 20 31 20 32 20|Строка1 !!! 1 2

Характеристики

Тип файла
Документ
Размер
576 Kb
Тип материала
Высшее учебное заведение

Список файлов книги

Методические указания к лабораторным работам
ЛР9_ПКШ
ЛР10_ПКШ
ЛР11_ПКШ
ЛР_12_КЛР_ПКШ
ЛР_13_КЛР_ПКШ
ЛР_14_КЛР_ПКШ
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7029
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее