int id;
if ((dpp = dispatch_create()) == NULL) {
fprintf(stderr,
"%s: Ошибка выделения контекста диспетчеризации\n",
argv[0]);
return (EXIT_FAILURE);
}
memset(&pool_attr, 0, sizeof(pool_attr));
pool_attr.handle = dpp;
pool_attr.context_alloc = resmgr_context_alloc;
pool_attr.block_func = resmgr_block;
pool_attr.handler_func = resmgr_handler;
pool_attr.context_free = resmgr_context_free;
// 1) Настроить пул потоков
pool_attr.lo_water = 2;
pool_attr.hi_water = 4;
pool_attr.increment = 1;
pool_attr.maximum = 50;
if ((tpp =
thread_pool_create(&pool_attr, POOL_FLAG_EXIT_SELF))
== NULL) {
fprintf(stderr,
"%s: Ошибка инициализации пула потоков\n",
argv[0]);
return (EXIT_FAILURE);
}
iofunc_func_init(_RESMGR_CONNECT_NFUNCS, &connect_func,
_RESMGR_IO_NFUNCS, &io_func);
iofunc_attr_init(&attr, S_IFNAM | 0777, 0, 0);
// 2) Переопределить функции установления соединения
// и функции ввода/вывода, как надо
memset(&resmgr_attr, 0, sizeof(resmgr_attr));
resmgr_attr.nparts_max = 1;
resmgr_attr.msg_max_size = 2048;
// 3) Замените «/dev/whatever» на нужный префикс
if ((id =
resmgr_attach(dpp, &resmgr_attr, "/dev/whatever",
_FTYPE_ANY,
0, &connect_func, &io_func, &attr)) == -1) {
fprintf(stderr, "%s: Ошибка регистрации префикса\n",
argv[0]);
return (EXIT_FAILURE);
}
// Отсюда возврата не будет
thread_pool_start(tpp);
}
Дополнительную информацию об интерфейсе диспетчеризации (т.е., о функции
Здесь мы используем функции пула потоков для создания пула, который должен будет обслуживать сообщения в нашем администраторе ресурсов. Вообще говоря, я бы рекомендовал вам начать однопоточного администратора ресурсов, как мы это делали ранее в примере с администратором /dev/null
Здесь мы дополняем администратор ресурсов
io_func.io_read = my_io_read;
Это переопределит элемент таблицы, инициализированный вызовом
Вы, вероятно, не захотите, чтобы ваш администратор ресурсов назывался /dev/whatever
/dev/абы_что
» — Простой пример функции
Бьерн Страуструп , Бьёрн Страуструп , Валерий Федорович Альмухаметов , Ирина Сергеевна Козлова
Программирование, программы, базы данных / Базы данных / Программирование / Учебная и научная литература / Образование и наука / Книги по IT