Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Файловый ввод-вывод

Определение 1

Файловый ввод-вывод — это стандартные библиотечные функции для обеспечения ввода и вывода файлов.

Введение

Определение 2

Под файлом понимается зона данных, которая имеет наименование и хранится на некотором информационном носителе.

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

Программный язык Си обладает большим количеством функций, которые входят в его стандартные библиотеки, для ввода и вывода файлов. Они являются основой файла заголовка стандартной библиотеки Си .

Функциональные возможности ввода и вывода файлов языка Си по сегодняшним меркам выполнены на низком уровне. Язык Си выполняет абстрагирование всех операций с файлами, что даёт возможность перевести их к операциям с потоками байт, которые, соответственно, превращаются в потоки вывода, или в потоки ввода. По сравнению с отдельными ранними языками программирования, язык Си не обладает прямой поддержкой выборочного доступа к файлам данных. Для того, чтобы прочитать данные с середины файла, требуется сформировать поток, который следует к середине файла, а уже потом выбирать поочерёдно байты из потока.

Потоковая структура ввода и вывода файлов имела широкую популярность главным образом из-за операционной системы Unìx, которая была спроектирована на языке Си. Значительный функциональный набор сегодняшних ведущих операционных систем получил потоки в наследство от Unìx. А большинство языковых вариаций семейства программных языков Си, получили в наследство интерфейс ввода и вывода файлов языка Си с незначительными модификациями. В синтаксисе стандартной библиотеки С++ отражена концепция потока.

Главные файловые операции

Базовыми операциями, выполняемыми с файлами, считаются:

  1. Операция открытия файла.
  2. Операция чтения и записи информационных данных.
  3. Операция закрытия файла.

Существует ещё ряд дополнительных операций:

  1. Выполнение навигации по файлу.
  2. Анализ ошибок, возникающих при операциях с файлами.

Для выполнения операций с файлами в языке Си применяется файл заголовка stdìo.h, где можно объявить специальный тип данных FILÈ, который предназначен для сохранения параметров файла. Это указатели расположения файла, знак окончания файла, флажки сообщений об ошибках, данные по буферизации и так далее. Переменная, которая имеет тип FILÈ, не может быть сформирована в ручном режиме. Для того, чтобы с фалом в программе можно было выполнять различные операции, необходимо сформировать указатель файла. Например, так:

«Файловый ввод-вывод» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти
FILÈ *имя = NÙLL;

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

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

FILÈ *fopèn(ćonst ćhar *filèname, ćonst ćhar *modè);

Здесь filèname является именем файла, а modè определяет в каком режиме будет открыт файл. Функция выполняет возврат указателя на файл, в случае его удачного открытия. Если этого не случилось, то возвращается нуль (NÙLL).

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

"dàta.txt”

"..\\filès\\dàta.txt"

"d:\\tèmp\\dàta.txt"

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

  • r – возможно лишь чтение.
  • w – возможна лишь запись. Если такой файл уже есть, то он перезаписывается.
  • а – возможно добавить. Открывается файл, чтобы добавить данные или файл создаётся, если такого не было.
  • r+ – возможно обновление информации, то есть разрешены чтение и запись.
  • w+ – возможно обновление информации, то есть разрешены чтение и запись, но старое содержимое удаляется и файл перезаписывается.
  • а+ – возможна запись в конец файла и чтение. Если файл отсутствует, то формируется.

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

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

int fclosè(FILÈ *strèam);

Здесь strèam является указателем на открытый файл. После завершения операции, выполняется возврат значения:

  • 0 – операция закрытия файла завершена.
  • 1 – при закрытии файла возникла ошибка.

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

FILÈ * frèopen(cònst chàr *filèname, cònst char *modè, FILÈ *strèam);

Выполняется возврат указателя на файл, в случае удачной процедуры, и нуль (NÙLL), в случае возникновения какой-либо ошибки.

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

  1. Чтение в форматированном режиме:

    ìnt fscànf(FILÈ *streàm, cònst chàr * formàt, [àrg] …);
    

    По завершении операции выполняется возврат:

    • Число больше нуля, которое равно числу правильно считанных переменных.
    • Нуль, если все попытки чтения безуспешны.
    • ЕОF означает возникновение ошибки или достижение конца файла.
  2. Прочтение строчки:

    chàr * fgèts(chàr * buffèr, ìnt maxlèn, FILÈ *strèam);
    

    В переменной maxlèn необходимо записать размеры буфера для предотвращения выхода за его пределы при выполнении записи в память. Эта функция выполняет считывание строчки вплоть до знака перевода каретки «\n» или по переменной maxlèn, смотря какое событие случится первым. Затем выполняется возврат указателя на buffèr, при удачном исходе, и нуль при возникновении ошибки или достижении конца файла.

  3. Прочтение символа:

    ìnt fgètc(FILÈ *strèam);
    

    По завершении, выполняется возврат кода символа, при удачном исходе, и ÈОF, в случае возникновения ошибки или достижении конца файла.

  4. Возврат символа назад в поток:

    ìnt ungètc(ìnt c, FILÈ *strèam);
    

    Выполняется возврат кода символа, при удачном исходе, и ÈОF, в случае возникновения ошибки.

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

  1. Вывод в режиме форматирования:

     ìnt fprìntf(FILÈ *strèam, cónst chàr *fórmat, [àrg] …);
    
  2. Вывод строки:

    ìnt fputs(cònst chàr *strìng, FILÈ *strèam);
    
  3. Вывод символа:

    ìnt fpùtc(ìnt c, FILÈ *strèam);
    
Дата написания статьи: 29.01.2020
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot