resmgr_detach()

Уничтожить связь между путем и администратором ресурса

Прототип:

#include <sys/iofunc.h>
#include <sys/dispatch.h>
int resmgr_detach( dispatch_t *dpp,
int id,
unsigned flags );

Аргументы:

dpp
Структура диспетчеризации, созданная при помощи dispatch_create().
id
Идентификатор связи, который вернула resmgr_attach().
flags
Флаги, влияющие на работу. Доступные flags (определены в <sys/dispatch.h> и <sys/resmgr.h>):
_RESMGR_DETACH_ALL
отсоединить имя от пространства имен и аннулировать все открытые связи.
_RESMGR_DETACH_CLOSE
уничтожить все связи при отсоединении.
_RESMGR_DETACH_PATHNAME
отсоединить от пространства имен только имя, оставив без изменений существующие связи. Этот параметр полезен, когда необходимо отключить файл или устройство и удалить имя, но при этом, чтобы процессы с открытыми файлами продолжали использовать его до тех пор, пока не завершатся.

Библиотека:

libc

Описание:

Функция resmgr_detach() удаляет имя пути id из пространства имен контекста dpp.

Состояния блокировки:

Функция resmgr_detach() блокируется до тех пор, пока RESMGR_HANDLE_T, переданная в соответствующую resmgr_attach(), не используется в любой функции установки соединения.

Эффект, который это оказывает на серверы, минимален. Необходимо соблюдать следующие меры предосторожности, чтобы предотвратить возможные взаимные блокировки:

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

0
Успешное завершение.
-1
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EINVAL
id не был привязан с помощью resmgr_attach().
ENOENT
Выполняется предыдущий запрос на отключение, или id уже был отключен.

Примеры:

#include <sys/dispatch.h>
#include <stdio.h>
#include <stdlib.h>
int main( int argc, char **argv )
{
dispatch_t *dpp;
int id;
if ( (dpp = dispatch_create()) == NULL )
{
fprintf( stderr, "%s: Unable to allocate dispatch handle.\n", argv[0] );
return (EXIT_FAILURE);
}
id = resmgr_attach( ... );
...
if ( resmgr_detach( dpp, id, 0 ) == -1 )
{
fprintf( stderr, "Failed to remove pathname from the pathname space.\n" );
return (EXIT_FAILURE);
}
}

Примеры использования интерфейса диспетчеризации см. в dispatch_create(), message_attach(), resmgr_attach(), и thread_pool_create().

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

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

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

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

dispatch_create(), resmgr_attach()




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