int (*unlock_ocb)(ctp, void *reserved, ocb);
int (*sync)(ctp, io_sync_t *msg, ocb);
} resmgr_io_funcs_t;
В этой структуре я тоже сократил прототипы, опустив тип элемента resmgr_context_t*
) и тип последнего элемента, RESMGR_OCB_T*
). Полный прототип, например, для функции
int (*read)(resmgr_context_t *
Самый первый элемент структуры (
Отметим, что списки параметров в таблице функций ввода/вывода также довольно однообразны. Первый параметр —
Третий параметр, однако, отличается. Этот параметр называется
Как уже упоминалось ранее, когда придет время заполнять таблицы функций, рекомендуется пользоваться для этого функцией
resmgr_context_t
И, наконец, еще одна структура данных используется базовым уровнем библиотеки, чтобы отслеживать кое-какую информацию
Вот эта структура данных (взято из
):
typedef struct _resmgr_context {
int
struct _msg_info
resmgr_iomsgs_t *
struct _resmgr_ctrl *
int
int
int
int
iov_t
} resmgr_context_t;
Как и в случае с другими структурами данных, я позволил себе опустить зарезервированные поля.
Давайте взглянем на ее содержимое.