ham_attach(), ham_attach_node()

Присоединить объект

Прототип:

#include <ha/ham.h>
ham_entity_t * ham_attach( const char *ename,
int nd,
pid_t pid,
const char *line,
unsigned flags );
ham_entity_t * ham_attach_node( const char *ename,
const char *nodename,
pid_t pid,
const char *line,
unsigned flags );

Аргументы:

ename
Имя объекта; оно должно быть уникальным во всем контексте HAM.
nd
Этот параметр ham_attach() указывает идентификатор узла удаленного узла, на котором работает целевой объект (или будет работать). nd — это идентификатор удаленного узла на момент совершения вызова.

Note: Поскольку идентификаторы узлов являются временными объектами, следует получить значение nd непосредственно перед вызовом, используя netmgr_strtond() или другую функцию, которая преобразует nodename в идентификаторы узлов.

pid
Идентификатор процесса для подключения, если процесс уже запущен. Если pid ≤ 0, HAM запускает процесс и начинает отслеживать его. В этом случае в line также должен быть указан ПОЛНЫЙ путь (включая все необходимые аргументы) для запуска процесса.
nodename
Полное имя узла (FQNN).
line
Параметр line должен содержать ПОЛНЫЙ путь к исполняемому файлу вместе со всеми передаваемыми ему параметрами. Если либо имя пути, либо аргументы содержат пробелы, которые необходимо передать вызову spawn(), их необходимо заключить в кавычки. Когда подкомпоненты в аргументах line заключены в кавычки, используйте любой из следующих методов:
\'path with space\'
или
\"path with space\",
также допустимо:
"\'path with space\' arg1 arg2 \"arg3 with space\"".
Это будет рассматриваться как
"path with space" -> path
arg1 = arg1
arg2 = arg2
arg3 = "arg3 with space".
flags
Флаги:
HENTITYKEEPONDEATH
Указывает, что объект и все его условия будут сохранены, когда объект "умирает" и не перезапускается. По умолчанию удаляются все объекты, которые не были перезапущены.

Библиотека:

libham

Описание:

Функция ham_attach() используется для присоединения объекта к HAM. Функция ham_attach_node() используется, когда nodename используется для указания удаленного HAM вместо идентификатора узла (nd). Объектом может быть любой процесс в системе. Данная функция используется для того, чтобы:

После того, как объект была присоединен, к нему можно добавлять условия и действия. Для произвольных процессов HAM может отслеживать:


Note: Поскольку функции ham_attach*() создают соединение с HAM, для удобства они также выполняют и вызов ham_connect(). Таким образом, любой клиент, который делает вызов ham_attach(), не должен вызывать ham_connect() или ham_disconnect() до и после вызова ().

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

Адрес
Дескриптор объекта при успешном завершении.
NULL
Возникла ошибка. Код ошибки записан в errno.

Коды ошибок:

EBADF
Не удалось подключиться к HAM.
EEXIST
Переданное имя для действия уже существует.
EINVAL
Имя aname некорректно (например, содержит символ /) или имеет значение NULL. Переданный pid ≤ 0, однако line не был предоставлен.
ENAMETOOLONG
Указанное имя (в ename) слишком длинное, т.е. оно превышает _POSIX_PATH_MAX (определено в <limits.h>). Обратите внимание, что общая длина имени объекта/условия/действия также ограничена _POSIX_PATH_MAX.
ENOMEM
Недостаточно памяти для создания нового дескриптора.

В дополнение к вышеуказанным ошибкам HAM возвращает любую ошибку, с которой он сталкивается при обслуживании данного запроса.

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

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

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

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

ham_connect(), ham_detach(), ham_detach_self(), ham_disconnect(), procmgr_daemon()




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