C 进程间通信--消息队列

消息队列是消息的链接表,包括Posix消息队列system V消息队列。有足够权限的进程可以向队列中添加消息,被赋予读权限的进程则可以读走队列中的消息。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。


//消息队列A

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct msgbuf{
long mtype;
char mtext[256];
}msgbuf_t;
int main(){
key_t key;
key = ftok("hello",31);
if(key==-1){
perror("ftok");
return 1;
}
int msg = msgget(key,IPC_CREAT|0664);
printf("key = %d\n",key);
if(msg==-1){
perror("msgget");
return 2;
}
msgbuf_t mb;
mb.mtype = 3;
strcpy(mb.mtext,"this is test\n");
int s = msgsnd(msg,&mb,strlen(mb.mtext)+1,0);
if(s==-1){
perror("msgsnd");
return 3;
}
return 0;
}

//消息队列B

#include <stdio.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
typedef struct msgbuf{
long mtype;
char mtext[256];
}msgbuf_t;
int main(){
key_t key;
key = ftok("hello",31);
if(key==-1){
perror("ftok");
return 1;
}
int msg = msgget(key,IPC_CREAT|0664);
printf("key = %d\n",key);
if(msg==-1){
perror("msgget");
return 2;
}
msgbuf_t mb;
ssize_t s = msgrcv(msg,&mb,256,3,0);
if(s==-1){
perror("msgsnd");
return 3;
}
printf("%s\n",mb.mtext);
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值