建立两个.c 建立子父进程,父进程发送消息到队列,子进程读取队列,另一个同样。
#include <myhead.h> struct msga { long mtype; char mtext[1024]; }; #define len sizeof(struct msga)-sizeof(long) int main(int argc, const char *argv[]) { pid_t pid; pid=fork(); if(pid>0) { key_t key=ftok("./",'L'); if(key==-1) { perror("ftok"); return -1; } int msgID=msgget(key,IPC_CREAT|0664); if(msgID==-1) { perror("msgget"); return -1; } struct msga 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,len,0); if(strcmp(send.mtext,"quit")==0) { break; } } if(msgctl(msgID,IPC_RMID,NULL)==-1) { perror("msgctl"); return -1; } } else if(pid==0) { key_t key=ftok("./",'Y'); if(key==-1) { perror("ftok"); return -1; } int msgID=msgget(key,IPC_CREAT|0664); if(msgID==-1) { perror("msgget"); return -1; } struct msga rev; while(1) { msgrcv(msgID,&rev,len,0,0); printf("%s\n",rev.mtext); if(strcmp(rev.mtext,"quit")==0) { break; } } if(msgctl(msgID,IPC_RMID,NULL)==-1) { perror("msgctl"); return -1; } } else { perror("fork"); return -1; } return 0; }
#include <myhead.h> struct msga { long mtype; char mtext[1024]; }; #define len sizeof(struct msga)-sizeof(long) int main(int argc, const char *argv[]) { pid_t pid; pid=fork(); if(pid>0) { key_t key=ftok("./",'Y'); if(key==-1) { perror("ftok"); return -1; } int msgID=msgget(key,IPC_CREAT|0664); if(msgID==-1) { perror("msgget"); return -1; } struct msga 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,len,0); if(strcmp(send.mtext,"quit")==0) { break; } } if(msgctl(msgID,IPC_RMID,NULL)==-1) { perror("msgctl"); return -1; } } else if(pid==0) { key_t key=ftok("./",'L'); if(key==-1) { perror("ftok"); return -1; } int msgID=msgget(key,IPC_CREAT|0664); if(msgID==-1) { perror("msgget"); return -1; } struct msga rev; while(1) { msgrcv(msgID,&rev,len,0,0); printf("%s\n",rev.mtext); if(strcmp(rev.mtext,"quit")==0) { break; } } if(msgctl(msgID,IPC_RMID,NULL)==-1) { perror("msgctl"); return -1; } } else { perror("fork"); return -1; } return 0; }
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 进程间的通信
发表评论 取消回复