消息队列结构体
snd
#include <myhead.h>
//定义结构体
typedef struct
{
long msgtype; //消息类型
char name[20]; //学生姓名
int age; //学生年龄
float score; //学生分数
char ch[10]; //是否继续输入
}stu;
#define MSGSZ (sizeof(stu) - sizeof(long))
int main(int argc, const char *argv[])
{
//获取key值
key_t key;
if ((key = ftok("/",'s')) == -1)
{
perror("ftok error");
return -1;
}
//创建消息队列
int msgid;
if ((msgid = msgget(key,IPC_CREAT|0664)) == -1)
{
perror("msgget error");
return -1;
}
//向消息队列发送数据
stu msg = {.msgtype = 10};
while(1)
{
//读取结构体内容
printf("请输入学生姓名:");
scanf("%s",msg.name);
printf("请输入学生年龄:");
scanf("%d",&msg.age);
printf("请输入学生分数:");
scanf("%f",&msg.score);
printf("是否继续输入(y/n):");
scanf("%s",msg.ch);
//将消息发到消息队列中
if (msgsnd(msgid,&msg,MSGSZ,0) == -1)
{
perror("msgsnd error");
return -1;
}
//判断是否结束
if (strcmp(msg.ch,"n") == 0)
break;
}
//删除消息队列
msgctl(msgid,IPC_RMID,NULL);
return 0;
}
rcv
#include <myhead.h>
//定义结构体
typedef struct
{
long msgtype; //消息类型
char name[20]; //学生姓名
int age; //学生年龄
float score; //学生分数
char ch[10]; //是否继续输入
}stu;
#define MSGSZ (sizeof(stu) - sizeof(long))
int main(int argc, const char *argv[])
{
//获取key值
key_t key;
if ((key = ftok("/",'s')) == -1)
{
perror("ftok error");
return -1;
}
//创建消息队列
int msgid;
if ((msgid = msgget(key,IPC_CREAT|0664)) == -1)
{
perror("msgget error");
return -1;
}
//向消息队列发送数据
stu msg = {.msgtype = 10};
while(1)
{
//将消息发到消息队列中
if (msgrcv(msgid,&msg,MSGSZ,10,0) == -1)
{
perror("msgrcv error");
return -1;
}
printf("学生姓名:%s\n学生年龄:%d\n学生分数:%.1f\n",msg.name,msg.age,msg.score);
//判断是否结束
if (strcmp(msg.ch,"n") == 0)
{
break;
}
}
return 0;
}
信号灯集输出abc