Создать канал асинхронных сообщений
![]() | Асинхронный обмен сообщениями не работает с прозрачной распределенной обработкой (т.е. не работает в Qnet). |
#include <sys/neutrino.h>#include <sys/asyncmsg.h>int asyncmsg_channel_create( unsigned flags,mode_t mode,size_t buffer_size,unsigned max_num_buffer,const struct sigevent *ev,int (*recvbuf_callback)( size_t bufsize,unsigned num_bufs,void *bufs[],int flags,void *handle ),void *recvbuf_callback_handle );
_NTO_CHF_ASYNC
.0
, если не требуется, чтобы функция выделяла какие-либо буферы.NULL
, или указатель на структуру struct sigevent которая определяет событие, которое требуется доставить, когда сообщение станет доступным для приема в ранее пустой очереди.NULL
, или указатель на функцию обратного вызова, которую библиотека может использовать для выделения буфера для входящего сообщения или для освобождения буферов при уничтожении канала. Если обратный вызов задан как NULL
, библиотека использует malloc() и free().NULL
, или указатель на произвольные данные, которые требуется передать функции обратного вызова.libasyncmsg
Функция asyncmsg_channel_create() function создает канал асинхронных сообщений.
Callback function
Если аргумент recvbuf_callback не равен NULL
, библиотека обмена асинхронными сообщениями вызывает данную функцию при вызовах:
ASYNCMSG_RECVBUF_ALLOC
. Ожидается, что обратный вызов выделит место для сообщения, поместит указатель на буфер в таблице bufs, а затем вернет 1
, если требуется, чтобы библиотека получила другой буфер, или 0
, если требуется, чтобы он остановился. ASYNCMSG_RECVBUF_FREE
, а возвращаемое значение игнорируется. Аргументы функции обратного вызова recvbuf_callback():
1
(обратный вызов вызывается один раз для каждого полученного буфера). ASYNCMSG_RECVBUF_ALLOC
когда asyncmsg_get() вызывает функцию обратного вызова, и ASYNCMSG_RECVBUF_FREE
когда asyncmsg_channel_destroy() вызывает ее. NULL
,или указатель на произвольные данные (указанные в аргументе recvbuf_callback_handle asyncmsg_channel_create()) который требуется передать функции обратного вызова. Идентификатор созданного канала. Если возникла ошибка функция возвращает -1
, код ошибки записывается в errno.
ЗОСРВ «Нейтрино»
struct stat, asyncmsg_channel_destroy(), asyncmsg_connect_attach(), asyncmsg_connect_attr(), asyncmsg_connect_detach(), asyncmsg_flush(), asyncmsg_free(), asyncmsg_get(), asyncmsg_malloc(), asyncmsg_put(), asyncmsg_putv(), ChannelCreate(), struct sigevent
Примеры использования и сведения об архитектуре библиотеки доступны в разделе общие сведения.
Предыдущий раздел: Описание API библиотеки asyncmsg