system_v 简单操作

首先贴代码:

#include <stdio.h>
#include <sys/msg.h>
#include <sys/ipc.h>
#include <sys/types.h>
#include <stdlib.h>

typedef struct msgbuf{
    long mtype;
}Msg;


int main(){
    int key1 = ftok("/home/li/msg", 'a');
    Msg msg;
    if(fork() == 0)
    {
        int key2 = ftok("/home/li/msg", 'a');
        int i = 0;
        int flag = msgget(key2, 0777|IPC_CREAT);
        if (flag < 0)
            perror("send flag error\n");
        Msg msg1;
        for(i = 300; i < 340; i++){
            msg1.mtype = i;
            if (msgsnd(flag, &msg1, 0,IPC_NOWAIT) < 0)
                perror("send error\n");
        }
    }
    else
    {
        int i = 0;
        int flag = msgget(key1, 0777|IPC_CREAT);
        if ( flag < 0)
            perror("recv flag error\n");
        while(1){
            for(i = 340; i > 300 ;i--){
                if (msgrcv(flag, &msg, 0, i,  IPC_NOWAIT) == 0)
                    printf("recv i = %d\n", i); 
            }
        }
        
    }
    exit(0);
}

运行时候切忌要使用root权限。

 上述代码干的活就是子进程发送一些空的消息,类型从300-339, 父进程接受这些消息。

从上面代码仍然可以看出,消息队列可以发送一个没有长度的消息。只包含了消息类型一项。

你可能感兴趣的:(system_v 简单操作)