Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
РГЗ.docx
Скачиваний:
3
Добавлен:
13.09.2019
Размер:
277.44 Кб
Скачать

Содержание

  1. Задание

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

  3. Краткое описание программы

  4. Код программы

  5. Скриншоты

  6. Выводы

Задание

Написать программу, которая обеспечивает работу команды вида: [имя_команды] [-a |-b] [-o исходный файл], где-a и-b несовместимые флаги. • если задан флаг-a - команда отображает имя домашнего директории, в котором пользователь оказывается после входа в систему; • если задан флаг-b - имя терминала. Полученная информация также записывается в файл, имя которого задается как аргумент опции-o.

Теоретическая часть Открытие и создание файла.

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

#include <fcntl.h.>

#include<sys/types.h

#include<sys/stat.h>

int open(char *filename, int flags, [mode_t mode]);

char *filename – символьная строка , содержащая имя открываемого файла (путь к нему).

int flags – указывает способ открытия файла.

[mode_t mode] – необязательный параметр режима доступа для создаваемого файла. Обычно для задания прав доступа к файлу используют восьмеричную систему представления прав доступа. Но в POSIX также есть следующий набор констант, которые можно объединять в аргументе mode_t mode, применяя к ним операцию бинарного или:

S_IRWXU – у владельца есть разрешение на чтение, запись и выполнение;

S_IRUSR – у владельца есть разрешение на чтение;

S_IWUSR – у владельца есть разрешение на запись;

S_IXUSR – у владельца есть разрешение на выполнение;

S_IRWXG – у группы есть разрешение на чтение, запись и выполнение;

и тому подобные.

Эти константы режима файла объявлены в заголовочном файле sys/stat.h. Поэтому для их использования необходимо его подключить.

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

Флаги открытия файла представляют собой набор символических констант, которые могут соединяться операцией побитового или (||). Чтобы использовать эти флаги и системный вызов open(), в программу необходимо включить заголовочный файл fcntl.h.

Основные флаги для системного вызова open(), объявленные в заголовочном файле fcntl.h:

O_RDONLY – открыть файл только для чтения;

O_WRONLY – открыть файл только для записи;

O_RDWR – открыть файл для чтения и записи;

O_CREAT – создать файл, если он не существует;

O_TRUNC – очистить файл, если он существует. То есть файл усекается до нулевой длины;

O_APPEND – дописать в существующий файл. Перед каждой записью указатель позиции в файле устанавливается на конец файла, тем самым позволяя дописать в файл. Все данные будут записаны в конец файла, даже если текущее смещение было восстановлено с помощью lseek();

O_EXCL – не открывать файл, если он существует (используется с флагом O_CREATE)

O_NONBLOCK – открыть файл в неблокируемом режиме, если это возможно. То есть считается столько байт, сколько есть. Если флаг не установлен – процесс чтения переходит в состояние ожидания необходимого количества информации.

Следует отметить, что некоторые флаги не могут объединяться между собой. Здесь нужно рассуждать логически. Нельзя, например, соединить флаги O_RDONLY и O_WRONLY, поскольку они противоречат друг другу.

Возвращаемое open() значение является либо новым дескриптором файла, либо -1, означающим ошибку, в этом случае для переменной errno будет установлено подходящее значение ошибки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]