美文网首页
Linux IPC 通信实例

Linux IPC 通信实例

作者: 江河湖海洋 | 来源:发表于2022-10-24 13:30 被阅读0次

    Linux IPC 通信实例

    发送端:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    
    //gcc ipcSendDemo.c -o  send
    //定义消息队列的信息格式MSG
    typedef struct msg
    {
        long type;
        char text[100];
        int a;
        char name[32];
    }MSG;
    
    int main(int argc, char *argv[])
    {
        //获取IPC唯一key值key
        key_t key = ftok("/",1);
        printf("[key=%#x]\n",key);
        //创建一个消息队列,队列标识符为msg_id
        int msg_id = msgget(key,IPC_CREAT|0666);
        printf("[msg_id=%d]\n",msg_id);
        //新建一个信息
        MSG msg;
        memset(&msg,0,sizeof(msg));
        msg.type = 10;
        msg.a = 100;
        strcpy(msg.name,"lucky");
        strcpy(msg.text,"hello world");
    
        //发送上面新建的信息
        int ret = msgsnd(msg_id, &msg, sizeof(MSG)-sizeof(long),0);
        printf("[ret=%d]\n", ret);
    
        return 0;
    }
    
    

    接收端:

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <unistd.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    
    //gcc ipcRecvDemo.c -o recv
    
    //定义消息队列的信息格式MSG
    typedef struct msg
    {
        long type;
        char text[100];
        int a;
        char name[32];
    }MSG;
    
    int main(int arg, char *argv[])
    {
        //获取IPC唯一key值key
        key_t key = ftok("/",1);
        printf("[key=%#x]\n",key);
        //创建一个消息队列,队列标识符为msg_id
        int msg_id = msgget(key,IPC_CREAT|0666);
        printf("[msg_id=%d]\n",msg_id);
        //接收消息
        MSG msg;
        while(1)
        {
            memset(&msg,0,sizeof(msg));
            int ret = msgrcv(msg_id, &msg, sizeof(MSG)-sizeof(long), 10,0);
            printf("[type=%ld][name=%s][a=%d][text=%s][ret=%d]\n", msg.type, msg.name,msg.a, msg.text, ret);
        }
        return 0;
    }
    
    

    相关文章

      网友评论

          本文标题:Linux IPC 通信实例

          本文链接:https://www.haomeiwen.com/subject/cwugzrtx.html