Б.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, права доступа к файлу могут оказаться более жесткими).
Значения umask
При создании файла с помощью функции open() некоторые из указываемых битов режима могут отключаться. Это следствие того, что значение umask не равно нулю. Данное значение определяет биты, которые отнимаются от кода режима всех файлов, создаваемых пользователем. Правило определения режима доступа к файлу таково, значение umask подвергается инверсии, а затем побитово умножается на заданный код режима. Полученное значение становится новым кодом режима.
Для изменения значения umask предназначена одноименная команда, принимающая восьмеричный аргумент. Если требуется изменить значение umask работающего процесса, вызовите функцию umask().
Например, функция
umask(S_IRWXO | S_IWGPF);
и команда
% umask 027
означают, что право записи для группы а также права чтения, записи и выполнения для остальных пользователей будут всегда отниматься от прав доступа к создаваемым файлам.
Листинг Б.1. (createfile.c) Создание файла
#include <fcntl.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <unistd.h>
int main(int argc, char* argv[]) {
/* Путевое имя нового файла */
char* path = argv[1];
/* Права доступа к файлу. */
mode_t mode =
S_IRUSR | S_IWUSR| S_IRGRP | S_IWGRP | S_IROTH;
/* Создание файла. */
int fd = open(path, O_WRONLY | O_EXCL | O_CREAT, mode);
if (fd == -1) {
/* Произошла ошибка. Выводим сообщение и завершаем работу. */
perror("open");
return 1;
}
return 0;
}
Результаты работы программы будут такими:
% ./create-file testfile
% ls -l testfile
-rw-rw-r-- 1 samuel users 0 Feb 1 22:47 testfile
% ./create-file testfile
open: File exists
Обратите внимание на то, что длина файла равна нулю, так как программа не записывала в него никакие данные.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Создание и открытие файла
Создание и открытие файла Поскольку данная функция является первой из функций Windows, к изучению которых мы приступаем, ее описание будет несколько более подробным по сравнению с остальными; для других функций часто будут приводиться лишь краткие описания. Вместе с тем,
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
Открытие SCM
Открытие SCM Для создания службы требуется отдельный процесс, выступающий в качестве "администратора" и играющий во многом ту же роль, что и программа JobShell, которая использовалась в главе 6 для запуска задач. Первый шаг состоит в открытии SCM и получении дескриптора, который
25.2.1. Открытие файла qdbm
25.2.1. Открытие файла qdbm Библиотечная функция dpopen() используется для открытия файлов базы данных.#include <depot.h>DB * dpopen(const char * filename, int omode, int bnum);Первый аргумент представляет имя файла, который будет использоваться для базы данных[176]. Аргумент omode определяет способ доступа к
Открытие существующего WS-файла
Открытие существующего WS-файла Имеющийся на диске WS-файл открывается так же, как и обычный одиночный сценарий — с помощью пункта меню File|Open. Для примера откроем созданный в главе 7 файл PhoneBook.wsf, который содержит четыре задания. По умолчанию этот файл открывается в режиме
Открытие документа
Открытие документа Существует несколько способов открыть файл InDesign – от двойного щелчка кнопкой мыши на значке файла в окне Проводника до перетаскивания значка на рабочую область программы. Не ставя себе целью перечислить все возможные способы, мы ограничимся
Открытие документа
Открытие документа Открыть документ Photoshop или любой другой растровый файл можно с помощью команды File ? Open (Файл ? Открыть). Окно команды открытия, как и окно команды сохранения, может отображаться в двух видах: в стиле Adobe или в стиле, приближенном к стандарту Windows (рис. 7.9). В
Открытие документа
Открытие документа Для открытия созданного ранее документа Word выполните команду Открыть в меню Кнопки «Office» (либо нажмите комбинацию клавиш Ctrl+O). В результате откроется окно, изображенное на рис. 2.12. Рис. 2.12. Открытие документа ВНИМАНИЕ Чтобы пользовательский шаблон
1.1.1. Открытие исходного файла C/C++
1.1.1. Открытие исходного файла C/C++ Чтобы запустить редактор Emacs, наберите emacs в окне терминала и нажмите <Enter>. Появится окно редактора, в верхней части которого имеется строка меню. Перейдите в меню Files, выберите команду Open Files и наберите имя требуемого файла в строке
Б.1.1. Открытие файла
Б.1.1. Открытие файла Чтобы открыть файл и получить дескриптор для работы с ним, необходимо вызвать функцию open(). В качестве аргументов она принимает строку с путевым именем файла и флаги, определяющие способ открытия. С помощью функции open() можно также создать новый файл.
8.3.3 Открытие Файлов
8.3.3 Открытие Файлов Точные детали того, как открываются и закрываются файлы, различаются в разных операционных системах и здесь подробно не описываются. Поскольку после включения «stream.h» станвятся доступны cin, cout и cerr, во многих (если не во всех) программах не нужно держать
8.5. Открытие файла
8.5. Открытие файла Чтобы открыть файл, необходимо выполнить команду File ? Open (Файл ? Открыть). Лучше, конечно, вместо этого использовать стандартное клавиатурное сокращение Ctrl+O. Но самый удобный способ выполнять команду Open (Открыть) – это даже не клавиатурное сокращение.
13.5. Открытие документов
13.5. Открытие документов Для открытия документа используется команда меню Файл, Открыть. Ей соответствует комбинация клавиш. В результате выполнения данной команды откроется окно Открытие документа, в котором вы сможете выбрать файл (рис. 132). Рис. 132. Открытие
4.2.6. Открытие файла в другой программе
4.2.6. Открытие файла в другой программе Практически с каждым типом файла связана какая-то программа, используемая для обработки файлов этого типа. Когда вы в Проводнике дважды щелкаете на файле, то будет запущена программа, соответствующая этому типу. Например, для