作业:
建立两个c建立子父进程,父进程发送消息到队列,子进程读取队列,另一个同样
01.c
#include <myhead.h>
#include"sem.h"
typedef struct {
long mtype;
char mtext[200];
}MSG;
#define leng sizeof(MSG)-sizeof(long)
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid>0)
{
key_t key = ftok("./",'K');
if(key==-1)
{
perror("ftok"); return -1;
}
int msgid = msgget(key,IPC_CREAT|0664);//获取消息队列的id if(msgid==-1)
{
perror("msgget"); return -1;
}
MSG send;
while(1)
{
printf("请输入消息的类型:");
scanf("%ld",&send.mtype);
getchar();
printf("请输入消息的正文:");
fgets(send.mtext,sizeof(send.mtext),stdin);
send.mtext[strlen(send.mtext)-1] = '\0';
msgsnd(msgid,&send,leng,0);
if(strcmp(send.mtext,"quit")==0)
{
break;
}
}
}
else if(pid==0)
{
key_t key = ftok("./",'W');//创建第二个队列
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid = msgget(key,IPC_CREAT|0664);//获取消息队列的id
if(msgid==-1)
{
perror("msgget"); return -1;
}
MSG rcv;
while(1)
{
msgrcv(msgid,&rcv,leng,0,0);//阻塞接收消息的所有消息
if(strcmp(rcv.mtext,"quit")==0)
{
break;
}
printf("%s\n",rcv.mtext);
}
}
else{
perror("fork");
return -1;
}
return 0;
}
02.c
#include <myhead.h>
typedef struct {
long mtype;
char mtext[200];
}MSG;
#define leng sizeof(MSG)-sizeof(long)
int main(int argc, const char *argv[])
{
pid_t pid = fork();
if(pid>0)
{
key_t key = ftok("./",'W');//写入数据user1的子进程对应的队列
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid = msgget(key,IPC_CREAT|0664);//获取消息队列的id
if(msgid==-1)
{
perror("msgget");
return -1;
}
MSG send;
while(1)
{
printf("请输入消息的类型:");
scanf("%ld",&send.mtype);
getchar();
printf("请输入消息的正文:");
fgets(send.mtext,sizeof(send.mtext),stdin);
send.mtext[strlen(send.mtext)-1] = '\0';
msgsnd(msgid,&send,leng,0); i
if(strcmp(send.mtext,"quit")==0)
{
break;
}
}
}
else if(pid==0)
{
key_t key = ftok("./",'K');//创建第二个队列
if(key==-1)
{
perror("ftok");
return -1;
}
int msgid = msgget(key,IPC_CREAT|0664);//获取消息队列的id
if(msgid==-1)
{
perror("msgget");
return -1;
}
MSG rcv;
while(1)
{
msgrcv(msgid,&rcv,leng,0,0);//阻塞接收消息队列类型为1的所有消息 if(strcmp(rcv.mtext,"quit")==0)
{
break;
}
printf("%s\n",rcv.mtext);
}
}
else{
perror("fork");
return -1;
}
return 0;
}