9.4.3.3. Работа с флагами статуса файла и режимами доступа

9.4.3.3. Работа с флагами статуса файла и режимами доступа

В разделе 4.6.3 «Возвращаясь к open()» мы предоставили полный список флагов O_xx, которые принимает open(). POSIX разбивает их по функциям, классифицируя в соответствии с табл. 9.4.

Таблица 9.4. Флаги O_xx для open(), creat() и fcntl()

Категория Функции Флаги
Доступ к файлу open(), fcntl() O_RDONLY, O_RDWR, O_WRONLY
Создание файла open() O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC
Статус файла open(), fcntl() O_APPEND, O_DSYNC, O_NONBLOCK, O_RSYNC, O_SYNC

Помимо первоначальной установки различных флагов с помощью open(), вы можете использовать fcntl() для получения текущих установок, а также их изменения. Это осуществляется с помощью значений cmd F_GETFL и F_SETFL соответственно. Например, вы можете использовать эти команды для изменения установки неблокирующего флага, O_NONBLOCK, подобным образом:

int fd_flags;

if ((fd_flags = fcntl(fd, F_GETFL)) < 0)

 /* обработать ошибку */

if ((fd_flags & O_NONBLOCK) != 0) { /* Установлен неблокирующий флаг */

 fd_flags &= ~O_NONBLOCK; /* Сбросить его */

 if (fcntl(fd, F_SETFL, fd_flags) != 0) /* Дать ядру новое значение */

  /* обработать ошибку */

}

Помимо самих режимов именованная константа O_ACCMODE является маской, которую вы можете использовать для выделения из возвращаемого значения режимов прав доступа.

fd_flags = fcntl(fd, F_GETFL);

switch (fd_flags & O_ACCESS) {

case O_RDONLY:

 /* ...действия только для чтения... */

 break;

case O_WRONLY:

 /* ...действия только для записи... */

 break;

case O_RDWR:

 /* ...действия для чтения и записи... */

 break;

}

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

Используя F_SETFL вы можете также изменить эти режимы, хотя по-прежнему применяется проверка прав доступа. Согласно справочной странице GNU/Linux fcnlt(2) флаг O_APPEND не может быть сброшен, если он использовался при открытии файла.

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

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

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

Установка статуса

Из книги Мир общения: ICQ автора Леонтьев Виталий Петрович

Установка статуса Щелкнув по значку ICQ правой кнопкой и выбрав меню My Status, вы можете вручную установить свой статус в сети ICQ при входе в сеть. Базовый, основной статус, который и установлен у вас по умолчанию, подразумевает полную открытость: все видят вас, знают, что вы в


Повышение статуса идентификации

Из книги Все под контролем: Кто и как следит за тобой автора Гарфинкель Симеон

Повышение статуса идентификации И Бертильон, и Хершель понимали, что технологии идентификации в современном обществе могут использоваться с двумя целями. С одной стороны, эти технологии востребованы правоохранительными органами. Имея в своем распоряжении реестр


1.4.5. Понятие владельца файла, права доступа к файлам и каталогам

Из книги Fedora 8 Руководство пользователя автора Колисниченко Денис Николаевич

1.4.5. Понятие владельца файла, права доступа к файлам и каталогам Первоначально в DOS, а затем и в Windows не было такого понятия, как "владелец файла" и "права доступа к файлу". Права доступа к файлам и каталогам появились только в файловой системе NTFS, но фактически NTFS "пришла в


Изменение статуса в сети

Из книги Skype: бесплатные звонки через Интернет. Начали! автора Гольцман Виктор Иосифович

Изменение статуса в сети Программа отображает ваш статус определенным набором значков, посмотрев на которые, другие пользователи могут понять, находитесь ли вы в сети, или вас нет на месте, или вы просите не беспокоить. Такой значок располагается в нижней левой части


Помещение значка статуса на веб-страницу

Из книги Компьютер на 100. Начинаем с Windows Vista автора Зозуля Юрий

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


Практическая работа 59. Создание новой учетной записи и изучение действующих разграничений доступа к файлам

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Практическая работа 59. Создание новой учетной записи и изучение действующих разграничений доступа к файлам Задание. Создать новую учетную запись и настроить ее параметры. Проверить действие прав доступа к личным папкам пользователей. ВНИМАНИЕ Для выполнения этой


Установка размера файла, инициализация файла и разреженные файлы

Из книги Инфраструктуры открытых ключей автора Полянская Ольга Юрьевна

Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла


Онлайновый протокол статуса сертификата

Из книги Сетевые средства Linux автора Смит Родерик В.

Онлайновый протокол статуса сертификата Онлайновый протокол статуса сертификата OCSP - относительно простой протокол (типа "запрос-ответ") для получения информации об аннулировании от доверенного субъекта, называемого OCSP-респондером . OCSP-запрос состоит из номера версии


Проверка статуса сертификата

Из книги Самоучитель Skype. Бесплатная связь через Интернет автора Яковлева Е. С.

Проверка статуса сертификата Эта проверка завершается успешно, если издатель не аннулировал данный сертификат. Основным средством проверки статуса сертификата являются списки САС, но могут использоваться и другие альтернативные средства


Владелец файла и права доступа

Из книги QNX/UNIX [Анатомия параллелизма] автора Цилюрик Олег Иванович

Владелец файла и права доступа Средства защиты Linux базируются на понятиях принадлежности файла определенному владельцу и правах доступа к нему, принятых в системе UNIX. Однако SMB/CIFS использует те же признаки несколько по-другому. Средства SMB/CIFS регистрируют пользователей,


Объявление вашего статуса

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

Объявление вашего статуса Программа может сообщить всем вашим друзьям о вашем статусе, т. е. о том, находитесь вы в сети или нет, свободны вы для разговора или нет, на месте вы или нет, либо вы невидимы, или вас не нужно беспокоить. Причем программа сообщает об этом не просто


Изменение статуса

Из книги Linux программирование в примерах автора Роббинс Арнольд

Изменение статуса Статус легко изменить следующими способами:1. Выберите в меню Файл команду Изменить режим в сети и в раскрывающемся списке укажите режим связи.2. Вызовите раскрывающийся список, щелкнув на треугольничке в левом нижнем углу диалогового окна программы


Получение статуса семафора

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

Получение статуса семафора int sem_getvalue(sem_t* sem, int* value);Эта функция используется преимущественно для отладки операций над семафорами. По адресу, указанному в value, устанавливается текущее значение счетчика семафора. Поскольку значение счетчика семафора может измениться в


5.8. Права доступа и атрибуты файла. Команды chown, chmod и chattr

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

5.8. Права доступа и атрибуты файла. Команды chown, chmod и chattr 5.8.1. Права доступа к файлам и каталогам Для каждого каталога и файла вы можете задать права доступа. Точнее права доступа автоматически задаются при создании каталога (файла), а вы, при необходимости, можете их


9.1.5.1. Определение статуса завершения процесса

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

9.1.5.1. Определение статуса завершения процесса Статус завершения (exit status) (известный также под другими именами значения завершения (exit value), кода возврата (return code) и возвращаемого значения (return value)) представляет собой 8-битовое значение, которое родитель может использовать


9.1.6. Использование статуса завершения порожденного процесса

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

9.1.6. Использование статуса завершения порожденного процесса Когда процесс заканчивается, нормальным ходом событий для ядра является освобождение всех его ресурсов. Ядро сохраняет статус завершения законченного процесса, также, как сведения о ресурсах, которые он