#include <myhead.h>
#define SIZE sizeof(struct msgbuf)-sizeof(long)
struct msgbuf//容器
{
long mtype;
char mtext[1024];
};
int main(int argc, const char *argv[])
{
key_t key=ftok("/",'k');//成才
if(key==-1)
{
perror("ftok");
return -1;
}
key_t son=ftok("/",'s');//许三多
if(son==-1)
{
perror("ftok");
return -1;
}
printf("我拿到钥匙%#x\n",key);
int msgqid= msgget(key,IPC_CREAT|0664);//创造或进入钢七连
if(msgqid==-1)
{
perror("msgqid");
return -1;
}
int msgqiq= msgget(son,IPC_CREAT|0664);//创造或进入草原五班
if(msgqid==-1)
{
perror("msgqiq");
return -1;
}
printf("魔童降世\n");
struct msgbuf buf;//指导员
pid_t pid=fork();//不要管老爹了
if(pid>0)
{
while(1)
{
printf("请输入类型>>>");//有一个道理不用讲,老师讲过的我不讲
scanf("%ld",&buf.mtype);
getchar();
printf("请输入消息>>>");
fgets(buf.mtext,SIZE,stdin);
buf.mtext[strlen(buf.mtext)-1]=0;
msgsnd(msgqid,&buf,SIZE,0);//许三多你做腹部绕杠
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
printf("发送成功\n");
}
}
else if(pid==0)
{
while(1)
{
msgrcv(msgqiq,&buf,SIZE,0,0);//收到马班长命令,开始铺路
putchar(10);
printf("收到消息>>>");
printf("%s\n",buf.mtext);
if(strcmp(buf.mtext,"quit")==0)//功成名就,告老还乡
{
break;
}
}
if(msgctl(msgqiq,IPC_RMID,NULL)==-1)//草原五班解散
{
perror("msgctl");
return -1;
}
printf("删除成功\n");
exit(EXIT_SUCCESS);
}
waitpid(-1,NULL,WNOHANG);
return 0;
}
#include <myhead.h>
#define SIZE sizeof(struct msgbuf)-sizeof(long)
struct msgbuf//容器
{
long mtype;
char mtext[1024];
};
int main(int argc, const char *argv[])
{
key_t key=ftok("/",'k');//成才
if(key==-1)
{
perror("ftok");
return -1;
}
key_t son=ftok("/",'s');//许三多
if(son==-1)
{
perror("ftok");
return -1;
}
printf("钥匙在手%#x\n",key);
struct msgbuf buf;
int msgqid=msgget(key,IPC_CREAT|0664);//史班长带我走吧
if(msgqid==-1)
{
perror("pid");
return -1;
}
int msgqiq= msgget(son,IPC_CREAT|0664);//这个兵我要你了
if(msgqiq==-1)
{
perror("msgqiq");
return -1;
}
printf("魔童僵尸\n");
pid_t pid=fork();//孩子你去吧
if(pid==-1)
{
perror("fork");
return -1;
}
if(pid>0)
{
while(1)//好好活 有意义
{
msgrcv(msgqid,&buf,SIZE,0,0);//钢七连收到命令
putchar(10);
printf("收到消息>>>");
printf("%s\n",buf.mtext);
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
}
if(msgctl(msgqid,IPC_RMID,NULL)==-1)//钢七连原地解散不抛弃不放弃
{
perror("msgctl");
return -1;
}
printf("删除成功\n");
}
else if(pid==0)
{
while(1)
{
printf("请输入类型>>>");
scanf("%ld",&buf.mtype);
getchar();
printf("请输入消息>>>");
fgets(buf.mtext,SIZE,stdin);
buf.mtext[strlen(buf.mtext)-1]=0;
msgsnd(msgqiq,&buf,SIZE,0);//许三多 我命令你去铺路
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
printf("发送成功\n");
}
exit(EXIT_SUCCESS);
}
waitpid(-1,NULL,WNOHANG);
return 0;
}
2.
#include <myhead.h>
int main(int argc, const char *argv[])
{
key_t key = ftok("/",'t');//我有对象了!
if(key==-1)
{
perror("ftok");
return -1;
}
int shmid =shmget(key,PAGE_SIZE,IPC_CREAT|0664);//带对象回家
if(shmid==-1)
{
perror("shmget");
return -1;
}
printf("%d\n",shmid);
char *addr = (char *)shmat(shmid,NULL,0);//入乡随俗
char arr[128]="";
printf("adrr=%p\n",addr);
while(1)
{
printf("请输入>>>");
fgets(arr,sizeof(arr),stdin);
arr[strlen(arr)-1]=0;
strcpy(addr,arr);//给孩子塞点红包
if(strcmp(addr,"quit")==0)
{
break;
}
}
if(shmdt(addr)==-1)//你说你想要自由 爱过了就不遗憾
{
perror("addr");
return -1;
}
return 0;
}
#include <myhead.h>
int main(int argc, const char *argv[])
{
key_t key = ftok("/",'t');//我也找到对象了
if(key==-1)
{
perror("ftok");
return -1;
}
int shmid =shmget(key,PAGE_SIZE,IPC_CREAT|0664);//给宝宝一个家
if(shmid==-1)
{
perror("shmget");
return -1;
}
printf("%d\n",shmid);
char *addr = (char *)shmat(shmid,NULL,O_RDONLY);//过门了
printf("adrr=%p\n",addr);
char arr[128]="";
while(1)
{
usleep(100000);
if(strcmp(addr,"quit")==0)
{
break;
}
if(strcmp(addr,arr)!=0)
{
printf("消息为:%s\n",addr);//让我看看你的真面目
}
strcpy(arr,addr);
}
if(shmdt(addr)==-1)//燕子 还会再见面吗
{
perror("shmdt");
return -1;
}
if(shmctl(shmid,IPC_RMID,NULL)==-1)//对不起 下辈子永远在一起
{
perror("shmctl");
return -1;
}
return 0;
}
Day19 第6站 谜?进程通信的新姿态参战 !消队、共存!
于 2024-08-06 22:18:38 首次发布