Хелпикс

Главная

Контакты

Случайная статья





Лабораторная работа №5. Тема: Файловый ввод/вывод в языке С. Цель работы: изучить базовые функции файловой системы языка программирования С. Научиться создавать, читать, записывать и модифицировать файлы.. Теоретическая часть



Лабораторная работа №5

Тема: Файловый ввод/вывод в языке С

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

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

Файл – это именованный объект, хранящий данные (программа или любая другая информация) на каком-либо носителе (дискета, винчестер, CD).

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

Не у всех файлов одинаковые возможности. Например, к дисковому файлу прямой доступ возможен, в то время как к некоторым принтерам – нет. В языке С все потоки одинаковы, а файлы – нет.

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

Файл отсоединяется от определенного потока (т.е. разрывается связь между файлом и потоком) с помощью операции закрытия. При закрытии файла, открытого с целью вывода, содержимое (если оно есть) связанного с ним потока записывается на внешнее устройство. Этот процесс, который обычно называют дозаписью потока, гарантирует, что никакая информация случайно не останется в буфере диска. Если программа завершает работу нормально, т.е. либо функция main() возвращает управление операционной системе, либо вызывается функция exit(), то все файлы закрываются автоматически. В случае аварийного завершения программы, например, в случае краха или завершения путем вызова функции abort(), файлы не закрываются.

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

Текстовый поток – это последовательность символов. В стандарте С считается, что текстовый поток организован в виде строк, каждая из которых заканчивается символом новой строки. Однако в конце последней строки этот символ не является обязательным. В текстовом потоке по требованию базовой среды могут происходить определенные преобразования символов. Например, символ новой строки может быть заменен парой символов – возврата каретки (например, \r ) и перевода строки (например, \n ), т.е. \r\n.

Двоичные потоки – это последовательность байтов, которая взаимно однозначно соответствует байтам на внешнем устройстве, причем никакого преобразования символов не происходит. Кроме того, количество тех байтов, которые пишутся (читаются), и тех, которые хранятся на внешнем устройстве, одинаково. Однако в конце двоичного потока может добавляться определяемое приложением количество нулевых байтов. Такие нулевые байты, например, могут использоваться для заполнения свободного места в блоке памяти незначащей информацией, чтобы она в точности заполнила сектор на диске.

Файловая система языка С состоит из нескольких взаимосвязанных функций. Самые распространенные из них показаны в табл. 13.1.

Таблица 13.1.



  

© helpiks.su При использовании или копировании материалов прямая ссылка на сайт обязательна.