11.2.3. Открытие файлов в файловой системе

11.2.3. Открытие файлов в файловой системе

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

#include <fcntl.h>

#include <unistd.h>

int open(char *pathname, int flags, mode_t mode);

int creat(char *pathname, mode_t mode);

Функция open() возвращает файловый дескриптор, указывающий на pathname. Если возвращенное значение меньше нуля, значит, произошла ошибка (как всегда, errno содержит код ошибки). Аргумент flags описывает тип доступа, который нужен вызывающему процессу, а также управляет различными атрибутами открытия и манипулирования файлом. Режим доступа всегда должен быть указан, и он может быть одним из следующих: O_RDONLY, O_RDWR либо O_WRONLY, что запрашивает доступ, соответственно, только по чтению, по чтению и записи либо только по записи. С этим режимом может быть объединены логическим "И" следующие значения для управления прочей семантикой файлов.

O_CREAT Если файл еще не существует, создать его как обычный файл.
O_EXCL Этот флаг должен использоваться только с O_CREAT. Если он указан, то open() дает сбой в случае существования файла. Этот флаг позволяет реализовать простую блокировку, но не надежен при использовании в сетевых файловых системах типа NFS (подробно о блокировке файлов рассказывается в главе 13).
O_NOCTTY Открываемый файл не становится управляющим терминалом процесса (см. главу 10). Этот флаг имеет значение только тогда, когда процесс, не имеющий управляющего терминала, открывает устройство tty. Если же он указан в любом другом случае, этот флаг игнорируется.
O_TRUNC Если файл уже существует, его содержимое отбрасывается, и его размер устанавливается равным 0.
O_APPEND Все операции записи выполняются в конец файла, хотя произвольный доступ по чтению также разрешен.
O_NONBLOCK Файл открывается в неблокирующем режиме. Операции с нормальными файлами всегда блокируются, потому что они работают с локальными жесткими дисками, имеющими предсказуемое время отклика, но операции на некоторых типах файлов требуют непредсказуемого времени для завершения. Например, чтение из канала, в котором нет данных, блокирует процесс чтения до тех пор, пока данные в нем не появятся. Если же специфицирован флаг O_NONBLOCK, вызов read() вместо блокирования вернет ноль байт. Файлы, на операции с которыми может понадобиться непредсказуемый объем времени, называются медленными файлами. (Примечание. O_NDELAY — оригинальное имя O_NONBLOCK, теперь устаревшее.)
O_SYNC Обычно ядро перехватывает операции записи и сбрасывает их на физическое устройство тогда, когда это удобно. Хотя такая реализация значительно повышает производительность, появляется также возможность потери данных, чем в том случае, когда они немедленно пишутся на диск. Если при открытии файла указан флаг O_SYNC, то все изменения в файле сохраняются на диске перед тем, как ядро возвращает управления процессу, выполняющему запись. Это очень важно для некоторых приложений, таких как системы управления базами данных, в которых принудительная запись используется для предотвращения повреждения данных в случае сбоя системы.

Параметр mode указывает права доступа для файла, если он создается и если он модифицируется текущей установкой umask процесса. Если не указано O_CREAT, то mode игнорируется.

Функция creat() в точности эквивалентна следующему вызову:

open(pathname, O_CREAT | O_WRONLY | O_TRUNC, mode)

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

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

10.1.2.6 Другие функции, имеющие отношение к файловой системе

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

10.1.2.6 Другие функции, имеющие отношение к файловой системе Такие функции работы с файловой системой, как stat и chmod, выполняются одинаково, как для обычных файлов, так и для устройств; они манипулируют с индексом, не обращаясь к драйверу. Даже системная функция lseek работает


Пара слов о файловой системе

Из книги Разгони свой сайт автора Мациевский Николай

Пара слов о файловой системе Вопрос: зачем нужны дополнительные тесты на производительность файловой системы, ведь уже есть характерное время, уходящее на gzip-сжатие определенных размеров файлов?Ответ: во-первых, любой веб-сервер и так берет файл из файловой системы и


(2.4) Что нового в файловой системе NTFS5, и в чем её отличия от NTFS4?

Из книги Win2K FAQ (v. 6.0) автора Шашков Алексей

(2.4) Что нового в файловой системе NTFS5, и в чем её отличия от NTFS4? Самое главное, за что ругали NT4, и в чём она уступала NetWare, это за отсутствие квотирования. Квотирование – это ограничение максимального объёма дискового пространства для пользователя, которое он сможет


Глава 5 Доступ из сценариев к файловой системе

Из книги Windows Script Host для Windows 2000/XP автора Попов Андрей Владимирович

Глава 5 Доступ из сценариев к файловой системе Сценарии WSH позволяют получить полный доступ к файловой системе компьютера, в отличие от JScript- или VBScript-сценариев, внедренных в HTML-страницы, где в зависимости от уровня безопасности, который устанавливается в настройках


22.2.3. Ограничение доступа к файловой системе

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

22.2.3. Ограничение доступа к файловой системе Еще одним способом устранения ошибок в кодах, предоставляющих возможность для атак, является ограничение набора файлов, к которым программа имеет доступ, с помощью системного вызова chroot(). Как обсуждалось в главе 14, метод chroot(),


Открытие файлов

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Открытие файлов Файл должен быть открыт функциями open, sopen или creat до выполнения первой операции ввода или вывода с использованием функций нижнего уровня для этого файла.Файл может быть открыт для чтения, записи, или для чтения и записи, может быть открыт в текстовом или в


12.4.5. Создание и монтирование файлов с файловой системой

Из книги Ubuntu 10. Краткое руководство пользователя автора Колисниченко Д. Н.

12.4.5. Создание и монтирование файлов с файловой системой Иногда (например, для создания своего мини-дистрибутива) требуется создать файл, содержащий собственную файловую систему. Первым делом надо создать пустой файл, потом создать в нем файловую систему, а затем


Мнемоника названий специальных файлов устройств в файловой системе UNIX

Из книги Операционная система UNIX автора Робачевский Андрей М.

Мнемоника названий специальных файлов устройств в файловой системе UNIX Названия специальных файлов устройств в большой степени зависят от конкретной версии UNIX. Тем не менее в этих названиях присутствует общая логика, позволяющая даже в незнакомой системе определить,


Доступ к файловой системе

Из книги Linux Mint и его Cinnamon. Очерки применителя автора Федорчук Алексей Викторович

Доступ к файловой системе Как было показано в главе 2, процесс совершает операции с файлами, адресуя их при помощи файловых дескрипторов — целых чисел, имеющих локальное для процесса значение. Это значит, что файловый дескриптор одного процесса может адресовать


Добавление и удаление объектов на файловой системе sysfs

Из книги автора

Добавление и удаление объектов на файловой системе sysfs Инициализированные объекты kobject автоматически не экспортируются через файловую систему sysfs. Для того чтобы сделать объект видимым через sysfs, необходимо использовать функцию kobject_add().int kobject_add(struct kobject *kobj);Положение


Добавление файлов на файловой системе sysfs

Из книги автора

Добавление файлов на файловой системе sysfs Объекты kobject отображаются на каталоги, и такое отображение выполняется естественным образом. А как насчет создания файлов? Файловая система sysfs — это не что иное, как дерево каталогов без файлов.Атрибуты, используемые по


Кратко об объектах kobject и файловой системе sysfs

Из книги автора

Кратко об объектах kobject и файловой системе sysfs В этой главе рассматривается модель представления устройств, файловая система sysfs, объекты kobject и уровень событий ядра. Описание материала главы было бы невозможно без рассмотрения родственных вещей: были также описаны


Навигация по файловой системе

Из книги автора

Навигация по файловой системе Следующее, что необходимо применителю после создания файлов — ориентация среди существующего их изобилия.Для начала при неплохо определиться со своим текущим положением в файловой системе. Этому послужит команда pwd. В ответ на нее