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

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


//消息队列A

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


你可能感兴趣的:(C/C++)