
- •050201 «Системная инженерия»
- •1. Цель работы
- •2. Постановка задачи
- •3. Краткие теоретические сведения
- •3.1. Системные вызовы
- •3.1.1. 6Открытие файла: Системный вызов open
- •3.1.2. Чтение данных из файла: системный вызов read
- •3.1.3. Запись в файл: системный вызов write
- •3.1.4. Закрытие файла: системный вызов close
- •3.1.5. Создание файла: системный вызов creat
- •3.2. Ошибки при выполнении системных вызовов
- •3.3. Генерация случайных чисел
- •4. Пример программы
- •5. Контрольные вопросы
- •Приложение а (справочное) Текст программы
М
инистерство
образования и науки Украины
Севастопольский национальный технический университет
работа с файлами и каталогами
Методические указания
к выполнению лабораторной работы №3
по дисциплине «Системное программирование»
для студентов направления подготовки
050201 «Системная инженерия»
дневной формы обучения
Севастополь
2010
УДК 681.5
Работа с файлами и каталогами:
Методические указания к выполнению
лабораторных работ по дисциплине
«Системное программирование» для
студентов направления подготовки 050201
«Системная инженерия» дневной формы
обучения /Разраб. Д.Н. Старинская,
П.Л. Светличный.
– Севастополь: Изд-во СевНТУ, 2009. –
Целью методических указаний является оказание помощи студентам при выполнении лабораторной работы, предназначенной для освоения работы с компилятором gcc, механизма передачи в программу параметров вызвавшей ее командной строки, поразрядных операций языка С.
Методические указания предназначены для студентов по направлению подготовки 050201 «Системная инженерия» дневной формы обучения.
Методические указания рассмотрены и утверждены на заседании кафедры технической кибернетики, протокол № 5 от 26 марта 2008г.
Допущено учебно-методическим центром СевНТУ в качестве методических указаний.
Рецензент:
1. Цель работы
Изучение системных вызовов для работы с файлами.
2. Постановка задачи
Напишите программу, которая решает задачу вашего варианта из лабораторной работы №2, используя передачу данных через двоичные (не текстовые) файлы.
Для работы с файлами используйте системные вызовы open(), creat(), read(), write(), close().
Задание включает следующие подзадачи, которые должны быть реализованы в виде отдельных функций, вызывающихся с помощью соответствующих опций командной строки:
1) Опция -g: формирование и вывод (на экран и в двоичный файл) 10-15 наборов неупакованных чисел, содержащих информацию о состоянии устройства.
2) Опция -p: чтение данных из файла и упаковка в слова состояния устройства. Вывод полученных упакованных чисел в новый файл и на экран.
3) Опция -u: чтение упакованных слов из файла, распаковка и вывод на экран.
Для хранения данных использовать тип unsigned short (в строке форматирования функций типа printf(), scanf() добавляется префикс h: %hu, %hx, %hd).
Должны быть реализованы проверки правильности выполнения всех операций с файлами.
3. Краткие теоретические сведения
3.1. Системные вызовы
3.1.1. 6Открытие файла: Системный вызов open
Системный вызов open создает связь между процессом и файлом. Эта связь называется дескриптором файла.
В самом общем случае, прежде чем читать или писать, вы должны проинформировать систему о действиях, которые вы намереваетесь выполнять в отношении файла; эта процедура называется открытием файла. Если вы собираетесь писать в файл, то, возможно, его потребуется создать заново или очистить от хранимой информации. Система проверяет ваши права на эти действия (файл существует? вы имеете к нему доступ?) и, если все в порядке, возвращает программе небольшое неотрицательное целое, называемое дескриптором файла. Всякий раз, когда осуществляется ввод-вывод, идентификация файла выполняется по его дескриптору, а не по имени. (Дескриптор файла аналогичен файловому указателю, используемому в стандартной библиотеке.) Вся информация об открытом файле хранится и обрабатывается операционной системой; программа пользователя обращается к файлу только через его дескриптор.
#include <fcntl.h>
int fd = open(char *name, int how)
Для открытия файла необходимо определить имя файла и тип соединения.
Аргумент name - это строка, содержащая имя файла. Второй аргумент, flags, имеет тип int и специфицирует, каким образом должен быть открыт файл. Его основными значениями являются:
O_RDONLY - открыть только на чтение;
O_WRONLY - открыть только на запись;
O_RDWR - открыть и на чтение, и на запись.
Открытие файлов – это служба ядра. Системный вызов open – это требование, которое выдает ваша программа ядру. Если ядро обнаружит ошибку при обращении к нему, то оно вернет код возврата, равный 1.
Ввод с клавиатуры и вывод на экран применяются настолько часто, что для удобства работы с ними предусмотрены специальные соглашения. При запуске программы командный интерпретатор (shell) открывает три файла с дескрипторами 0, 1 и 2, которые называются соответственно стандартным вводом, стандартным выводом и стандартным файлом ошибок. Если программа читает из файла 0, а пишет в файлы 1 и 2 (здесь цифры - дескрипторы файлов), то она может осуществлять ввод и вывод, не заботясь об их открытии.