iofunc_read_verify()

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

Прототип:

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

Аргументы:

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

Библиотека:

libc

Описание:

Вспомогательная функция iofunc_read_verify() проверяет имеет ли клиент, отправивший сообщение _IO_READ, разрешения на чтение ресурса и, если nonblock не равен NULL, устанавливает nonblock в O_NONBLOCK или 0.

Проверка разрешения на чтение выполняется с помощью ocb->ioflag.

Обратите внимание, что сообщение io_read_t содержит флаг msg->i.xtype. Этот флаг позволяет клиенту переопределять поведение по умолчанию для блокировки ресурса на основе каждого запроса. Этот флаг проверяется и возвращается в необязательном nonblock.

Если чтение производится из каталога, необходимо вернуть структуры struct dirent в обработчике read менеджера ресурсов.

Также необходимо указать сколько байт было прочитано. Можно сделать это с помощью макроса:

_IO_SET_READ_NBYTES( resmgr_context_t *ctp, int nbytes );

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

EOK
Клиент имеет доступ для чтения этого ресурса.
EBADF
У клиента нет доступа для чтения этого ресурса.

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

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

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

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

struct dirent, io_read_t, iofunc_open(), iofunc_write_verify(), resmgr_context_t




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