编程使用消息队列从父进程发送10个整数到子进程,子进程收下来后计算总和,后用同一个消息队列把总和发回给父进程显示。可用整数数组的方式发送,或者用循环逐个整数发送。
#Linux
例子:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MSG_KEY 75
struct msg_form {
long mtype;
int mtext[10];
};
int main()
{
int msgid, i, sum = 0;
struct msg_form data;
int len = sizeof(struct msg_form) - sizeof(long);
msgid = msgget(MSG_KEY, 0777 | IPC_CREAT);
if(msgid == -1)
{
perror("msgget");
exit(1);
}
// 父进程向子进程发送数据
for(i = 0; i < 10; i++)
{
data.mtext[i] = i + 1;
}
if(msgsnd(msgid, &data, len, 0) == -1)
{
perror("msgsnd");
exit(1);
}
// 子进程接收数据,计算总和
if(msgrcv(msgid, &data, len, 0, 0) == -1)
{
perror("msgrcv");
exit(1);
}
for(i = 0; i < 10; i++)
{
sum += data.mtext[i];
}
// 子进程发回总和
data.mtype = 1;
if(msgsnd(msgid, &data, len, 0) == -1)
{
perror("msgsnd");
exit(1);
}
// 父进程接收总和
if(msgrcv(msgid, &data, len, 1, 0) == -1)
{
perror("msgrcv");
exit(1);
}
printf("sum = %d\n", sum);
if(msgctl(msgid, IPC_RMID, 0) == -1)
{
perror("msgctl");
exit(1);
}
return 0;
}
该代码演示了如何在C语言中使用消息队列,从父进程发送10个整数到子进程,在子进程中计算总和,最后再通过消息队列发回给父进程