Синхронизация и взаимодействие программных потоков в операционной среде реального времени. Дорогов А.Ю. - 55 стр.

UptoLike

Составители: 

55
щений является один и тот же поток main(). Для формирования пакета не-
обходимо при образовании соединения с каналом при помощи вызова
asyncmsg_connect_attach() установить размер пакета. В данном примере
размер пакета устанавливается к значению 3.
#include <stdio.h>
#include <process.h>
#include <unistd.h>
#include <sys/asyncmsg.h>
int callback(int err, void *cmsg, unsigned handle)
{
printf("Callback: err = %d, msg = %p, handle = %d\n",
err, cmsg, handle);
return 0;
}
/************************************************************************************/
int main()
{
int chid, coid, i;
struct _asyncmsg_connection_attr aca;
struct _asyncmsg_get_header *agh, *agh1;
char msg[3][80]; // массив сообщений
// создать канал
if ((chid = asyncmsg_channel_create(_NTO_CHF_SENDER_LEN,
0666, 2048, 5, NULL, NULL)) == -1)
{
perror("channel_create");
return -1;
}
memset(&aca, 0, sizeof(aca));
aca.buffer_size = 2048; // размер буфера сообщения
aca.max_num_buffer = 5; // число буферов сообщений
aca.trigger_num_msg = 3; // число сообщений в пакете
// создать соединение
if ((coid = asyncmsg_connect_attach(0, 0, chid, 0, 0, &aca)) == -1)
{
perror("connect_attach");
return -1;
}
// сформировать и передать пакет тестовых сообщений
for (i = 0; i < 3; i++)
{
sprintf(msg[i], "Async Message Passing (msgid %d)\n", i);
if ((asyncmsg_put(coid, msg[i], strlen(msg[i]) + 1,
1234, callback)) == -1)
{
perror("put");
return -1;
}
}
// получить пакет сообщений
if ((agh = asyncmsg_get(chid)) == NULL)
{
perror("get");
return -1;