У меня есть writer.c и reader.c, и я пытаюсь отправить массив из writer, а затем распечатать числа в считывателе.
//writer.c
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
// structure for message queue
struct mesg_buffer {
int mesg_type;
int a[5];
} message;
int main()
{
message.a [0] = 5;
message.a [1] = 10;
message.a [2] = 15;
message.a [3] = 34;
message.a [4] = 34;
key_t key;
int msgid;
// ftok to generate unique key
key = ftok(".", 65);
// msgget creates a message queue
// and returns identifier
msgid = msgget(key, 0666 | IPC_CREAT);
message.mesg_type = 1;
// msgsnd to send message
for(int i=0;i<5;i++)
msgsnd(msgid, (int *) &message.a[i], sizeof(message.a[i]), 0);
// display the message
for(int i=0;i<5;i++)
printf("Data send is : %d \n", message.a[i]);
return 0;
}
reader.c
// C Program for Message Queue (Reader Process)
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/msg.h>
// structure for message queue
struct mesg_buffer {
int mesg_type;
int a[5];
} message;
int main()
{
key_t key;
int msgid;
// ftok to generate unique key
key = ftok(".", 65);
// msgget creates a message queue
// and returns identifier
msgid = msgget(key, 0666 | IPC_CREAT);
// msgrcv to receive message
for(int i=0; i<5; i++)
msgrcv(msgid, &message, sizeof(message.a[i]), 1, 0);
for(int i=0; i<5; i++)
printf("Data Received is : %d \n",
message.a[i]);
// to destroy the message queue
msgctl(msgid, IPC_RMID, NULL);
return 0;
}
Сначала я запускаю writer.c, и это мой вывод:
Отправка данных: 5
Отправка данных: 10
Отправка данных: 15
Отправка данных: 34
Отправка данных: 34
Но когда я запускаю reader.c, программа просто зависает и ничего не происходит.Любое предложение, как передать массив?
edit: Кажется, что передача только сообщения в msgsnd и msgrcv устранила проблему.
for(int i=0;i<5;i++)
msgsnd(msgid, &message, sizeof(message), 0);