进程间的通信
2024-01-10 09:24:07
?
使用消息队列完成两个进程间的通信?
#include <myhead.h>
//定义一个发送消息的结构体
struct msgbuf
{
long mtype; //消息类型
char mtext[1024]; //消息正文大小
};
//宏定义正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{
//1.创建key值
key_t key = ftok("/",'k');
if(key == -1)
{
perror("key create error");
return -1;
}
//key已经创建
printf("key = %#x\n",key);
//2.创建消息队列
int msgid = msgget(key,IPC_CREAT|0664);
if(msgid == -1)
{
perror("msgget error");
return -1;
}
printf("msgid = %d\n",msgid); //输出消息队列id号
struct msgbuf buf; //定义一个接收消息类型的变量
//创建进程
pid_t pid = -1;
pid =fork();
if(pid < 0)
{
perror("fork error");
return -1;
}else if(pid == 0)
{
//3.子进程从消息队列接收消息
buf.mtype=1;
while(1)
{
//将消息从消息队列中读取出来
msgrcv(msgid,&buf,SIZE,0,1);
//将读取的消息打印出来
printf("收到的消息:%s\n",buf.mtext);
//判断退出条件
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
//4.删除消息队列
if(msgctl(msgid,IPC_RMID,NULL)==-1)
{
perror("msgctl error");
return -1;
}
exit(EXIT_SUCCESS);
}
}else
{
while(1)
{
//输入消息内容
printf("请输入您要发送的消息内容:");
fflush(stdout);
scanf("%s",buf.mtext);
//将消息放入消息队列中
msgsnd(msgid,&buf,SIZE,0);
printf("发送成功\n");
//判断退出条件
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
waitpid(-1,NULL,WNOHANG);
}
}
return 0;
}
ubunt
#include <myhead.h>
//定义一个发送消息的结构体
struct msgbuf
{
long mtype; //消息类型
char mtext[1024]; //消息正文大小
};
//宏定义正文大小
#define SIZE (sizeof(struct msgbuf)-sizeof(long))
int main(int argc, const char *argv[])
{
//1.创建key值
key_t key = ftok("/",'k');
if(key == -1)
{
perror("key create error");
return -1;
}
//key已经创建
printf("key = %#x\n",key);
//2.创建消息队列
int msgid = msgget(key,IPC_CREAT|0664);
if(msgid == -1)
{
perror("msgget error");
return -1;
}
printf("msgid = %d\n",msgid); //输出消息队列id号
struct msgbuf buf; //定义一个接收消息类型的变量
//创建进程
pid_t pid = -1;
pid =fork();
if(pid < 0)
{
perror("fork error");
return -1;
}else if(pid > 0)
{
//3.子进程从消息队列接收消息
buf.mtype = 2;
while(1)
{
//将消息从消息队列中读取出来
msgrcv(msgid,&buf,SIZE,0,2);
//将读取的消息打印出来
printf("收到的消息:%s\n",buf.mtext);
//判断退出条件
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
//4.删除消息队列
if(msgctl(msgid,IPC_RMID,NULL)==-1)
{
perror("msgctl error");
return -1;
}
exit(EXIT_SUCCESS);
}
}else
{
while(1)
{
//输入消息内容
printf("请输入您要发送的消息内容:");
fflush(stdout);
scanf("%s",buf.mtext);
//将消息放入消息队列中
msgsnd(msgid,&buf,SIZE,0);
printf("发送成功\n");
//判断退出条件
if(strcmp(buf.mtext,"quit")==0)
{
break;
}
waitpid(-1,NULL,WNOHANG);
}
}
return 0;
}
ubu
?
?
文章来源:https://blog.csdn.net/wanyu_l/article/details/135494177
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!