Возвращает: Код завершения, при помощи вспомогательного макроса
int io_utime(resmgr_context_t *
RESMGR_OCB_T *
Классификация: Функция ввода/вывода
Обработчик по умолчанию:
Вспомогательные функции:
Клиентская функция:
Сообщения: _IO_UTIME
Структура данных:
struct _io_utime {
uint16_t
uint16_t
int32_t
struct utimbuf
};
typedef union {
struct _io_utime
} io_utime_t;
Описание: Устанавливает времена последнего доступа и модификации либо в «текущий момент» (если они равны нулю), либо в заданные значения. Заметьте, что согласно правилам POSIX этот обработчик сообщения может быть необходим для модификации флагов IOFUNC_ATTR_*
Возвращает: Код завершения, при помощи вспомогательного макроса
int io_write(resmgr_context_t *
RESMGR_OCB_T *
Классификация: Функция ввода/вывода
Обработчик по умолчанию:
Вспомогательные функции:
Клиентская функция:
Сообщения: _IO_WRITE
Структура данных:
struct _io_write {
uint16_t
uint16_t
int32_t
uint32_t
};
typedef union {
struct _io_write
} io_write_t;
Описание: Данный обработчик отвечает за получение данных, которые клиент записал в администратор ресурсов. Обработчику передается число байт, которые клиент пытается записать, в элементе
Отметьте, что чтобы удостовериться, что файл был открыт в режиме, совместимом с записью, следует вызвать вспомогательную функцию
Возвращает: Код завершения, при помощи вспомогательного макроса
Пример см. ниже в параграфе «Простой пример функции
Примеры
Этот раздел — своего рода «кулинарная книга» для программистов. Здесь я приведу ряд готовых примеров, которые вы сможете непосредственно использовать в качестве базиса для ваших проектов. Это не совсем готовые администраторы ресурсов — вы должны будете дополнить их функциями работы с пулами потоков и «каркасом» диспетчеризации (о котором речь ниже), а также удостовериться, что ваши версии функций- обработчиков помещаются в соответствующие таблицы функций
Я начну с ряда простых примеров, демонстрирующих базовые функциональные возможности обработчиков различных сообщений, таких как:
•
•
•
•
Затем, в разделе «Дополнительно», мы рассмотрим обработчик
Приведенный ниже пример можно использовать в качестве шаблона для многопоточного администратора ресурсов. (Шаблон однопоточного администратора ресурсов мы уже рассматривали — это было в разделе «Библиотека администратора ресурсов», когда мы обсуждали администратор /dev/null
#include
#include
#include
#include
#include
static resmgr_connect_funcs_t connect_func;
static resmgr_io_funcs_t io_func;
static iofunc_attr_t attr;
main(int argc, char **argv) {
thread_pool_attr_t pool_attr;
thread_pool_t *tpp;
dispatch_t *dpp;
resmgr_attr_t resmgr_attr;
resmgr_context_t *ctp;
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT