消息队列是一种可以一对多的传输信号的方式
#include<stdio.h>
#include<sys/types.h>#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>
#include<stdlib.h>
struct msgbuf
{
long mtype;
char mtext[1024];
};
int main()
{
char buffer[1024] = {0};
key_t key = ftok(".", 2); //将文件名转化为键值
if (-1 == key)
{
perror("key");
}
int msgid = msgget(key, IPC_CREAT); //创建消息队列
if (msgid == -1)
{
perror("msgget");
}
while(1)
{
struct msgbuf buf;
scanf("%d %s", &buf.mtype, buf.mtext);
msgsnd(msgid, &buf, sizeof(buf.mtext), 0); //发送信息给消息队列
memset(buf.mtext, 0, 1024);
}
return 0;
}
-----------------------------------------分割线--------------------------------------------------
#include<stdio.h>
#include<sys/types.h>
#include<sys/ipc.h>
#include<sys/msg.h>
#include<string.h>
#include<stdlib.h>
struct msgbuf
{
long mtype;
char mtext[1024];
};
int main()
{
key_t key = ftok(".", 2);
if (-1 == key)
{
perror("key");
}
int msgid = msgget(key, IPC_CREAT);
if (msgid == -1)
{
perror("msgget");
}
int type;
scanf("%d", &type);
while(1)
{
struct msgbuf buf;
msgrcv(msgid, &buf, sizeof(buf.mtext), type, 0); //接受信号,其中type为接受的信号编码
printf("rcv = %s\n", buf.mtext);
}
return 0;
}