Linux IPC 通信实例

2022-10-24  本文已影响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;
}

上一篇下一篇

猜你喜欢

热点阅读