Подтвердить наличие у клиента прав доступа на чтение ресурса
#include <sys/iofunc.h>int iofunc_read_verify( resmgr_context_t *ctp,io_read_t *msg,iofunc_ocb_t *ocb,int *nonblock );
NULL
или указатель на место, где функция может хранить значение, указывающее, является ли устройство неблокирующим: ≠0
— клиент не хочет быть заблокированным (т.е. установлен O_NONBLOCK
). 0
— клиент хочет быть заблокированным. 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 );
ЗОСРВ «Нейтрино»
struct dirent, io_read_t, iofunc_open(), iofunc_write_verify(), resmgr_context_t
Предыдущий раздел: Описание API системной библиотеки