分享

MsgQueue

 zxlvxj 2012-08-19
#include <stdio.h>
#include <unistd.h>
#include <sys/ipc.h>
#include <sys/msg.h>

#define BUFF_LEN 20

struct msg {
    int index;
    char msgQueue[BUFF_LEN];
};

int  main(int argc, char **argv)
{
    int pid;
    int ret;
    int num;
    int msg_id;

    msg_id = msgget((key_t)9527, IPC_CREAT);
    if (msg_id < 0) {
        fprintf(stderr, "Create msgQueue failed, line: %d\n", __LINE__);
        return -1;
    }

    pid = fork();
    if (pid < 0) {
        fprintf(stderr, "Create fork failed, line: %d\n", __LINE__);
        return -1;
    }

    if (pid == 0) {
        struct msg msg;
        msg.index = 1;
        num = 1;

        while (1) {
            sprintf(msg.msgQueue, "hello, %d\n", num);
            num++;
            msg.index++;

            ret = msgsnd(msg_id, &msg, sizeof(msg), 0);
            if (ret < 0) {
                fprintf(stderr, "Send msg failed, line: %d\n", __LINE__);
                return -1;
            }
            sleep(1);
        }
    } else {
        struct msg msg;

        while (1) {
            ret = msgrcv(msg_id, &msg, sizeof(msg), 0, 0);
            if (ret < 0) {
                printf("Recive msg failed, line: %d\n", __LINE__);
                return -1;
            }

            sleep(2);

            printf("index = %d\nMsgQueue%s\n", msg.index, msg.msgQueue);
        }
    }

    return 0;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多