Книга: Программирование для Linux. Профессиональный подход
Б.1.1. Открытие файла
Б.1.1. Открытие файла
Чтобы открыть файл и получить дескриптор для работы с ним, необходимо вызвать функцию open()
. В качестве аргументов она принимает строку с путевым именем файла и флаги, определяющие способ открытия. С помощью функции open()
можно также создать новый файл. Для этого ей нужно передать третий аргумент, определяющий права доступа к файлу.
Если второй аргумент равен O_RDONLY
, файл открывается только для чтения. При попытке записи в такой файл будет выдана ошибка. Точно так же флаг O_WRONLY
объявляет файл доступным только для записи. В случае флага O_RDWR
файл открывается и для чтения. и для записи. Не всякий файл можно открыть в любом из трех режимов. Например, существующие права доступа к файлу могут не позволить конкретному процессу открывать файл для чтения или записи. Файл, находящийся в устройстве, запись в которое невозможна (скажем, компакт-диск), тем более нельзя открыть для записи.
Существуют и другие флаги, определяющие режим открытия файла. Все они могут объединяться с помощью операции побитового ИЛИ. Перечислим наиболее распространенные флаги.
? O_TRUNC
— приводит к очистке существующего файла. Данные, записываемые в файл, замещают предыдущее содержимое файла.
? O_APPEND
— приводит к открытию файла в режиме добавления. Данные, записываемые в файл, добавляются в его конец.
? O_CREAT
— означает создание нового файла. Если указанное имя соответствует несуществующему файлу, он будет создан при условии, что заданный каталог существует и процесс имеет разрешение создавать в нем файлы. Если файл уже существует, он будет открыт. При наличии дополнительного флага O_EXCL
функция open()
откажется открывать существующий файл.
Когда в функции open()
задан флаг O_CREAT
, должен присутствовать третий аргумент, определяющий права доступа к создаваемому файлу. О режиме доступа к файлу и битах режима рассказывалось в разделе 10.3, "Права доступа к файлам".
Программа, представленная в листинге Б.1, создает файл, имя которого задано в командной строке. Функции open()
передается флаг O_EXCL
, поэтому в случае указания существующего файла возникнет ошибка. Владельцу и группе нового файла предоставляются права чтения и записи, остальным пользователям — только право чтения (если для пользователя, которому принадлежит программа, установлено значение umask
, права доступа к файлу могут оказаться более жесткими).
- Создание и открытие файла
- 12.6. Обращение к объектам, отображенным в память
- 6.1.6. Отображение файлов
- Открытие и редактирование документов
- Открытие документов для редактирования
- 4.4.2. Открытие и закрытие файлов
- Листинг 7.6. (open-and-spin.c) Открытие файла для чтения
- Открытие существующего одиночного сценария
- Создание нового WS-файла
- Открытие существующего WS-файла
- 7.2. Создание, открытие, печать и иные действия с графическими файлами
- 1.1.1. Открытие исходного файла C