关于#linux#的问题:编程使用消息队列从父进程发送10个整数到子进程,子进程收下来后计算总和,后用同一个消息队列把总和发回给父进程显示(语言-c语言)

编程使用消息队列从父进程发送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个整数到子进程,在子进程中计算总和,最后再通过消息队列发回给父进程