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;
}