Функция fcntl(2)
Функция fcntl(2)
После открытия файла и получения ссылки на него в виде файлового дескриптора процесс может производить различные файловые операции. Функция fcntl(2) позволяет процессу выполнить ряд действий с файлом, используя его дескриптор, передаваемый в качестве первого аргумента:
#include <fcntl.h>
int fcntl (int fildes, int cmd, ...);
Функция fcntl(2) выполняет действие cmd с файлом, а возможный третий аргумент зависит от конкретного действия:
F_DUPFD Разместить новый файловый дескриптор, значение которого больше или равно значению третьего аргумента. Новый файловый дескриптор будет указывать на тот же открытый файл, что и fildes. Действие аналогично вызову функции dup(2) или dup2(2): fddup = fcntl(fd, F_DUPFD, fildes2) F_GETFD Возвратить признак сохранения дескриптора при запуске новой программы (выполнении системного вызова exec(2)) — флаг close-on-exec (FD_CLOEXEC). Если флаг установлен, то при вызове exec(2) файл, ассоциированный с данным дескриптором, будет закрыт F_SETFD Установить флаг close-on-exec согласно значению, заданному третьим аргументом F_GETFL Возвратить режим доступа к файлу, ассоциированному с данным дескриптором. Флаги, установленные в возвращаемом значении, полностью соответствуют режимам открытия файла, задаваемым функции open(2). Их значения приведены в табл. 2.8. Рассмотрим пример: oflags = fcntl(fd, F_GETFL, 0); /* Выделим биты, определяющие режим доступа */ accbits = oflags & O_ACCMODE; if (accbits == O_RDONLY) printf("Файл открыт только для чтения "); else if (accbits == O_WRONLY) printf("Файл открыт только для записи "); else if (accbits == O_RDWR) printf("Файл открыт для чтения и записи "); F_SETFL Установить режим доступа к файлу согласно значению, переданному в третьем аргументе. Могут быть изменены только флаги O_APPEND, O_NONBLOCK, O_SYNC и O_ASYNC. F_GETLK Проверить существование блокирования записи файла. Блокирование записи, подлежащее проверке, описывается структурой flock, указатель на которую передается в качестве третьего аргумента. Если существующие установки не позволяют выполнить блокирование, определенное структурой flock, последняя будет возвращена с описанием текущего блокирования записи. Данная команда не устанавливает блокирование, а служит для проверки его возможности. Более подробно блокирование записей описано в главе 4, в разделе "Блокирование доступа к файлу". F_SETLK Установить блокирование записи файла. Структура flock описывает блокирование, и указатель на нее передается в качестве третьего аргумента. При невозможности блокирования fcntl(2) возвращается С ошибкой EACCESS или EAGAIN. F_SETLKW Аналогично предыдущему, но при невозможности блокирования по причине уже существующих блокировок, процесс переходит в состояние сна, ожидая, пока последние будут освобождены. Последняя буква W в названии действия означает wait (ждать).Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКДанный текст является ознакомительным фрагментом.
Читайте также
9.4.3. Управление атрибутами файла: fcntl()
9.4.3. Управление атрибутами файла: fcntl() Системный вызов fcntl() («управление файлом») предоставляет контроль над различными атрибутами либо самого дескриптора файла, либо лежащего в его основе открытого файла. Справочная страница GNU/Linux fcntl(2) описывает это таким способом:#include
9.4.3.5. Сводка fcntl()
9.4.3.5. Сводка fcntl() Сводка для системного вызова fcntl() приведена в табл. 9.5.Таблица 9.5. Сводка fcntl() Значение cmd Значение arg Возвращает F_DUPFD Наименьший новый дескриптор Дублирует аргумент fd F_GETFD Получает флаги дескриптора файла (close-on-exec) F_SETFD Новое значение
14.2.2. Блокировка POSIX: fcntl() и lockf()
14.2.2. Блокировка POSIX: fcntl() и lockf() Системный вызов fcntl() (file control — управление файлом) используется для блокировки файла. (Другое использование fcntl() было описано в разделе 9.4.3 «Управление атрибутами файла: fcntl()».) Он объявлен следующим образом:#include <unistd.h> /* POSIX */#include <fcntl.h>int
7.11. Функция fcntl
7.11. Функция fcntl Сокращение fcntl означает «управление файлами» (file control). Эта функция выполняет различные операции управления дескрипторами. Перед описанием этой функции и ее влияния на сокет нам нужно составить некоторое более общее представление о ее возможностях. В табл.
9.3. Блокирование записей с помощью fcntl по стандарту Posix
9.3. Блокирование записей с помощью fcntl по стандарту Posix Согласно стандарту Posix, интерфейсом для блокировки записей является функция fcntl:#include <fcntl.h>int fcntl(int fd, int cmd,… /* struct flock *arg */);/* Возвращает –1 в случае ошибки: результат, возвращаемый в случае успешного завершения,
Блокировка записей fcntl
Блокировка записей fcntl Последняя пpoгрaммa использует fcntl для синхронизации. Функция main приведена в листинге А.30. Эта программа будет выполняться успешно только в том случае, если количество потоков равно 1, поскольку блокировка fcntl предназначена для использования между
Функция SUM
Функция SUM Ваши возможности в подведении итогов не ограничены простым подсчетом записей. Используя функцию SUM, можно генерировать итоговые результаты для всех возвращаемых записей по любым числовым полям. Например, для создания запроса, который генерирует итоги по
20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями
20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями Механизмы ioctl(2) и fcntl(2) обеспечивают способ написания перехватчиков (hooks) в драйверах устройств. Первоначальным историческим использованием ioctl(2) была установка параметров, таких как скорость передачи и количество
20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями
20.3.7. Вызовы ioctl(2) и fcntl(2) являются препятствиями Механизмы ioctl(2) и fcntl(2) обеспечивают способ написания перехватчиков (hooks) в драйверах устройств. Первоначальным историческим использованием ioctl(2) была установка параметров, таких как скорость передачи и количество
8.3. Функция fcntl(): блокировки и другие операции над файлами
8.3. Функция fcntl(): блокировки и другие операции над файлами Функция fcntl() — это точка доступа к нескольким особым операциям над файлами. Первым аргументом функции является дескриптор файла, вторым указывается код операции. Для некоторых операций требуется также
Функция uni()
Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book
Функция uni()
Функция uni() Поиск/замена символа по его юникодному номеру также может быть сделана при помощи функции uni().Пример функции uni(): Boouni(107,32)Designer найдет слово Book