ham_action_handle(), ham_action_handle_node()

Получить дескриптор действия для условия объекта

Прототип:

#include <ha/ham.h>
ham_action_t * ham_action_handle( int nd,
const char *ename,
const char *cname,
const char *aname,
unsigned flags );
ham_action_t * ham_action_handle_node( int nd,
const char *nodename,
const char *ename,
const char *cname,
const char *aname,
unsigned flags );

Аргументы:

nd
Идентификатор удаленного узла, на котором расположена целевая комбинация объект/условие/действие.
nodename
Используется для указания удаленного HAM вместо идентификатора узла (nd) при вызове функции ham_action_handle_node().
ename
Имя объекта.
cname
Имя условия.
aname
Действие HAM.
flags
Флаги в настоящий момент не поддерживаются.

Библиотека:

libham

Описание:

Функция ham_action_handle() возвращает дескриптор действия (name) в условии (cname) объекта (ename).

Можно передавать дескриптор, полученный от данной функции, другим функциям, которые ожидают дескриптор (например, ham_action_remove() или ham_action_handle_free()).


Note: Чтобы получить дескриптор глобального объекта, следует передать NULL в ename.

Возвращаемый дескриптор непрозрачен — его содержимое доступно только для внутренних нужд библиотеки.

Если указан узел (nd), дескриптор будет относиться к комбинации объект/условие/действие, которая относится к процессу на данном удаленном узле. Функция ham_action_handle_node() используется, когда nodename используется для указания удалённого HAM вместо идентификатора узла (nd).

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

Адрес
Корректный дескриптор ham_action_t.
NULL
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EINVAL
Имя aname некорректно (например, содержит символ /) или имеет значение NULL. Не удалось подключиться к HAM. Это происходит, когда процесс, открывший соединение (используя ham_connect()), и процесс, вызывающий ham_action_execute(), не совпадают.
ENAMETOOLONG
Указанное имя (в aname) слишком длинное, т.е. оно превышает _POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX.
ENOENT
Отсутствует объект или условие с заданным дескриптором (chdl).
ENOMEM
Недостаточно памяти для создания нового дескриптора.

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

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

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

Предостережения:

Вызов ham_action_handle() и последующее использование дескриптора, возвращенного в вызове, аналогичном ham_action_remove(), полностью асинхронны. Следовательно, корректная связка действие/условие/объект может более не существовать к тому моменту, когда дескриптор будет использоваться.

В таком случае функции ham_action*() вернут ошибку (ENOENT), означающую, что действие для условия не существует в данном объекте.

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

ham_action_execute(), ham_action_handle_free(), ham_action_notify_pulse(), ham_action_notify_signal(), ham_action_remove(), ham_action_restart(), ham_action_waitfor(), ham_condition_handle(), ham_condition_handle_free(), ham_entity_handle(), ham_entity_handle_free()




Предыдущий раздел: Менеджер высокой готовности (HAM)