iofunc_lock_default()

Обработчик по умолчанию для сообщений _IO_LOCK

Прототип:

#include <sys/iofunc.h>
int iofunc_lock_default( resmgr_context_t *ctp,
io_lock_t *msg,
iofunc_ocb_t *ocb );

Аргументы:

ctp
Указатель на структуру resmgr_context_t, которую библиотека менеджера ресурсов использует для передачи контекстной информации между функциями.
msg
Указатель на структуру io_lock_t, содержащую сообщение, полученное менеджером ресурсов. См. iofunc_lock().
ocb
Указатель на структуру блока управления открытым контекстом (OCB, Open Control Block) iofunc_ocb_t, созданную при открытии ресурса клиентом.

Библиотека:

libc

Описание:

Функция iofunc_lock_default() реализует POSIX семантику для _IO_LOCK сообщения (генерируемого в результате клиентского вызова fcntl()).

Эту функцию можно поместить на место lock в таблицу io_funcs, передаваемую в resmgr_attach(). Или вызвать iofunc_func_init(), чтобы инициализировать все функции значениями по умолчанию.

Функция iofunc_lock_default() проверяет, имеет ли клиент необходимые права для изменения состояний блокировок ресурса. Это включает проверку разрешений на чтение и запись в зависимости от типа применяемой блокировки. Блокировка изменяет элементы структуры ocb->attr и обновляет ocb->attr->locklist, чтобы зарегистрировать новую блокировку. Эта функция вызывает iofunc_lock() для выполнения фактической работы.


Note: Если менеджер ресурсов вызывает iofunc_lock_default(), он также должен вызвать iofunc_close_dup_default() и iofunc_unblock_default() в соответствующих обработчиках.

Возвращаемое значение:

EOK
Успешное завершение.
EINVAL
Указан недопустимый для блокировки диапазон или была предпринята попытка выполнить недопустимую блокировку.
EBADF
Была предпринята попытка выполнить блокировку чтения для ресурса, доступного только только для записи, или блокировку записи для ресурса, доступного только для чтения.
ENOMEM
Недостаточно памяти для размещения внутренней структуры блокировки.

Классификация:

ЗОСРВ «Нейтрино»

Безопасность использования
Точка остановки потока
Нет
Обработчик прерываний
Нет
Обработчик сигналов
Да
В потоке
Да

Тематические ссылки:

iofunc_func_init(), iofunc_lock(), iofunc_ocb_t, iofunc_time_update(), resmgr_attach(), resmgr_context_t, resmgr_io_funcs_t




Предыдущий раздел: Описание API системной библиотеки