Создать канал асинхронных сообщений
| Асинхронный обмен сообщениями не работает с прозрачной распределенной обработкой (т.е. не работает в 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