进程间的通信

打印 上一主题 下一主题

主题 689|帖子 689|积分 2067

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x

   建立两个.c 建立子父进程,父进程发送消息到队列,子进程读取队列,另一个同样。
   
  1. #include <myhead.h>
  2. struct msga
  3. {
  4.     long mtype;
  5.     char mtext[1024];
  6. };
  7. #define len sizeof(struct msga)-sizeof(long)
  8. int main(int argc, const char *argv[])
  9. {
  10.     pid_t pid;
  11.     pid=fork();
  12.     if(pid>0)
  13.     {
  14.         key_t key=ftok("./",'L');
  15.         if(key==-1)
  16.         {
  17.             perror("ftok");
  18.             return -1;
  19.         }
  20.         int msgID=msgget(key,IPC_CREAT|0664);
  21.         if(msgID==-1)
  22.         {
  23.             perror("msgget");
  24.             return -1;
  25.         }
  26.         struct msga send;
  27.         while(1)
  28.         {
  29.             printf("请输入消息类型:");
  30.             scanf("%ld",&send.mtype);
  31.             getchar();
  32.             printf("请输入消息内容:");
  33.             fgets(send.mtext,sizeof(send.mtext),stdin);
  34.             send.mtext[strlen(send.mtext)-1]='\0';
  35.             msgsnd(msgID,&send,len,0);
  36.             if(strcmp(send.mtext,"quit")==0)
  37.             {
  38.                 break;
  39.             }
  40.         }
  41.         if(msgctl(msgID,IPC_RMID,NULL)==-1)
  42.         {
  43.             perror("msgctl");
  44.             return -1;
  45.         }
  46.     }
  47.     else if(pid==0)
  48.     {
  49.         key_t key=ftok("./",'Y');
  50.         if(key==-1)
  51.         {
  52.             perror("ftok");
  53.             return -1;
  54.         }
  55.         int msgID=msgget(key,IPC_CREAT|0664);
  56.         if(msgID==-1)
  57.         {
  58.             perror("msgget");
  59.             return -1;
  60.         }
  61.         struct msga rev;
  62.         while(1)
  63.         {
  64.             msgrcv(msgID,&rev,len,0,0);
  65.             printf("%s\n",rev.mtext);
  66.             if(strcmp(rev.mtext,"quit")==0)
  67.             {
  68.                 break;
  69.             }
  70.         }
  71.         if(msgctl(msgID,IPC_RMID,NULL)==-1)
  72.         {
  73.             perror("msgctl");
  74.             return -1;
  75.         }
  76.     }
  77.     else
  78.     {
  79.         perror("fork");
  80.         return -1;
  81.     }
  82.     return 0;
  83. }
复制代码

  

  
  1. #include <myhead.h>
  2. struct msga
  3. {
  4.     long mtype;
  5.     char mtext[1024];
  6. };
  7. #define len sizeof(struct msga)-sizeof(long)
  8. int main(int argc, const char *argv[])
  9. {
  10.     pid_t pid;
  11.     pid=fork();
  12.     if(pid>0)
  13.     {
  14.         key_t key=ftok("./",'Y');
  15.         if(key==-1)
  16.         {
  17.             perror("ftok");
  18.             return -1;
  19.         }
  20.         int msgID=msgget(key,IPC_CREAT|0664);
  21.         if(msgID==-1)
  22.         {
  23.             perror("msgget");
  24.             return -1;
  25.         }
  26.         struct msga send;
  27.         while(1)
  28.         {
  29.             printf("请输入消息类型:");
  30.             scanf("%ld",&send.mtype);
  31.             getchar();
  32.             printf("请输入消息内容:");
  33.             fgets(send.mtext,sizeof(send.mtext),stdin);
  34.             send.mtext[strlen(send.mtext)-1]='\0';
  35.             msgsnd(msgID,&send,len,0);
  36.             if(strcmp(send.mtext,"quit")==0)
  37.             {
  38.                 break;
  39.             }
  40.         }
  41.         if(msgctl(msgID,IPC_RMID,NULL)==-1)
  42.         {
  43.             perror("msgctl");
  44.             return -1;
  45.         }
  46.     }
  47.     else if(pid==0)
  48.     {
  49.         key_t key=ftok("./",'L');
  50.         if(key==-1)
  51.         {
  52.             perror("ftok");
  53.             return -1;
  54.         }
  55.         int msgID=msgget(key,IPC_CREAT|0664);
  56.         if(msgID==-1)
  57.         {
  58.             perror("msgget");
  59.             return -1;
  60.         }
  61.         struct msga rev;
  62.         while(1)
  63.         {
  64.             msgrcv(msgID,&rev,len,0,0);
  65.             printf("%s\n",rev.mtext);
  66.             if(strcmp(rev.mtext,"quit")==0)
  67.             {
  68.                 break;
  69.             }
  70.         }
  71.         if(msgctl(msgID,IPC_RMID,NULL)==-1)
  72.         {
  73.             perror("msgctl");
  74.             return -1;
  75.         }
  76.     }
  77.     else
  78.     {
  79.         perror("fork");
  80.         return -1;
  81.     }
  82.     return 0;
  83. }
复制代码

  




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

星球的眼睛

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表