Читаем Linux API. Исчерпывающее руководство полностью

В листинге 4.2 показаны примеры использования open(). В некоторых из них указываются дополнительные биты флагов, которые вскоре будут рассмотрены.

Листинг 4.2. Примеры использования open()

/* Открытие существующего файла для чтения */

fd = open("startup", O_RDONLY);

if (fd == -1)

errExit("open");

/* Открытие нового или существующего файла для чтения и записи с усечением до нуля

байтов; предоставление владельцу исключительных прав доступа на чтение и запись */

fd = open("myfile", O_RDWR | O_CREAT | O_TRUNC, S_IRUSR | S_IWUSR);

if (fd == -1)

errExit("open");

/* Открытие нового или существующего файла для записи; записываемые данные

должны всегда добавляться в конец файла */

fd = open("w.log", O_WRONLY | O_CREAT | O_APPEND,

S_IRUSR | S_IWUSR);

if (fd == -1)

errExit("open");

Номер дескриптора файла, возвращаемый системным вызовом open()

В SUSv3 определяется, что при успешном завершении системного вызова open() гарантируется, что процессу будет выделен наименьший неиспользуемый дескриптор файл. Этим можно воспользоваться, чтобы быть уверенными, что файл открыт с конкретным дескриптором файла. Например, следующая последовательность дает уверенность в том, что файл открывается с использованием дескриптора стандартного ввода (нулевой файловый дескриптор).

if (close(STDIN_FILENO) == -1) /* Закрытие нулевого файлового дескриптора */

errExit("close");

fd = open(pathname, O_RDONLY);

if (fd == -1)

errExit("open");

Поскольку дескриптор файла 0 не используется, open() гарантирует открытие файла с этим дескриптором. В разделе 5.5 показывается применение для получения аналогичного результата вызовов dup2() и fcntl(), но с более гибким управлением дескриптором файла. В этом разделе также приводится пример того, как можно извлечь пользу от управления файловым дескриптором, с которым открывается файл.

4.3.1. Аргумент flags системного вызова open()

В некоторых примерах вызова open(), показанных в листинге 4.2, во флаги, кроме режима доступа к файлу, включены дополнительные биты (O_CREAT, O_TRUNC и O_APPEND). Рассмотрим аргумент flags более подробно. В табл. 4.3 приведен полный набор констант, любая комбинация которых с помощью побитового ИЛИ (|), может быть передана в аргументе flags. В последнем столбце показано, какие из этих констант были включены в стандарт SUSv3 или SUSv4.

Таблица 4.3. Значения для аргументов флагов системного вызова open()

Флаг — Назначение — SUS?

O_RDONLY — Открытие только для чтения — v3

O_WRONLY — Открытие только для записи — v3

O_RDWR — Открытие для чтения и записи — v3

O_CLOEXEC — Установка флага закрытия при выполнении (close-on-exec) (начиная с версии Linux 2.6.23) — v4

O_CREAT — Создание файла, если он еще не существует — v3

O_DIRECTORY — Отказ, если аргумент pathname указывает не на каталог — v4

O_EXCL — С флагом O_CREAT: исключительное создание файла — v3

O_LARGEFILE — Используется в 32-разрядных системах для открытия больших файлов -

O_NOCTTY — Pathname запрещено становиться управляющим терминалом данного процесса — v3

O_NOFOLLOW — Запрет на разыменование символьных ссылок — v4

O_TRUNC — Усечение существующего файла до нулевой длины — v3

O_APPEND — Записи добавляются исключительно в конец файла — v3

O_ASYNC — Генерация сигнала, когда возможен ввод/вывод —

O_DIRECT — Операции ввода-вывода осуществляются без использования кэша —

O_DSYNC — Синхронизированный ввод-вывод с обеспечением целостности данных (начиная с версии Linux 2.6.33) — v3

O_NOATIME — Запрет на обновление времени последнего доступа к файлу при чтении с помощью системного вызова read() (начиная с версии Linux 2.6.8) -

O_NONBLOCK — Открытие в неблокируемом режиме — v3

O_SYNC — Ведение записи в файл в синхронном режиме — v3

Константы в табл. 4.3 разделяются на следующие группы.

• Флаги режима доступа к файлу. Это рассмотренные ранее флаги O_RDONLY, O_WRONLY и O_RDWR. Их можно извлечь с помощью операции F_GETFL функции fcntl() (см. раздел 5.3).

Флаги создания файла. Это флаги, показанные во второй части табл. 4.3. Они управляют различными особенностями поведения системного вызова open(), а также вариантами для последующих операций ввода-вывода. Эти флаги не могут быть извлечены или изменены.

Флаги состояния открытия файла. Это все остальные флаги, показанные в табл. 4.3. Они могут быть извлечены и изменены с помощью операций F_GETFL и F_SETFL функции fcntl() (см. раздел 5.3). Эти флаги иногда называют просто флагами состояния файла.

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных