`
weiyuhu
  • 浏览: 231613 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

linux进程通信(二)--消息队列

阅读更多
C代码

   1. /*msgserver.c*/ 
   2.  
   3. #include <stdlib.h> 
   4. #include <string.h> 
   5. #include <errno.h> 
   6. #include <sys/types.h> 
   7. #include <sys/ipc.h> 
   8. #include <sys/msg.h> 
   9. #include <sys/stat.h> 
  10.  
  11. #define   MSG_FILE "msgserver.c"  
  12. #define   BUFFER 255  
  13. #define   PERM S_IRUSR|S_IWUSR  
  14. /* 服务端创建的消息队列最后没有删除,我们要使用ipcrm命令来删除的 */ 
  15. /* ipcrm -q <msqid> */ 
  16.  
  17. struct msgtype  
  18. {  
  19.     long mtype;  
  20.     char buffer[BUFFER+1];  
  21. };  
  22.  
  23. int main()  
  24. {  
  25.     struct msgtype msg;  
  26.     key_t key;  
  27.     int msgid;  
  28.      
  29.     if((key=ftok(MSG_FILE,'a'))==-1)  
  30.     {  
  31.         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));  
  32.         exit(1);  
  33.     }  
  34.  
  35.     if((msgid=msgget(key, PERM|IPC_CREAT|IPC_EXCL))==-1)  
  36.     { 
  37.         fprintf(stderr, "Creat Message Error:%s\n", strerror(errno));  
  38.         exit(1); 
  39.     }  
  40.     printf("msqid = %d\n", msgid); 
  41.     while(1) 
  42.     {  
  43.         msgrcv(msgid, &msg, sizeof(struct msgtype), 1, 0);  
  44.         fprintf(stderr,"Server Receive:%s\n", msg.buffer);  
  45.         msg.mtype = 2;  
  46.         msgsnd(msgid, &msg, sizeof(struct msgtype), 0);  
  47.     }  
  48.     exit(0);  
  49. }    
   1. /* msgclient.c */ 
   2.  
   3. #include <stdio.h> 
   4. #include <stdlib.h> 
   5. #include <string.h> 
   6. #include <errno.h> 
   7. #include <sys/types.h> 
   8. #include <sys/ipc.h> 
   9. #include <sys/msg.h> 
  10. #include <sys/stat.h> 
  11.  
  12. #define   MSG_FILE "msgserver.c"  
  13. #define   BUFFER 255  
  14. #define   PERM S_IRUSR|S_IWUSR  
  15.  
  16. struct msgtype {  
  17.     long mtype;  
  18.     char buffer[BUFFER+1];  
  19. };  
  20.  
  21. int main(int argc, char **argv)  
  22. {  
  23.     struct msgtype msg;  
  24.     key_t key;  
  25.     int msgid;  
  26.      
  27.     if(argc != 2)  
  28.     {  
  29.         fprintf(stderr,"Usage:%s string\n", argv[0]);  
  30.         exit(1);  
  31.     }  
  32.      
  33.     if((key=ftok(MSG_FILE,'a'))==-1)  
  34.     {  
  35.         fprintf(stderr,"Creat Key Error:%s\n", strerror(errno));  
  36.         exit(1);  
  37.     }  
  38.      
  39.     if((msgid=msgget(key, PERM))==-1)  
  40.     {  
  41.         fprintf(stderr,"Creat Message  Error:%s\n", strerror(errno));  
  42.         exit(1);  
  43.     }  
  44.      
  45.     msg.mtype = 1;  
  46.     strncpy(msg.buffer, argv[1], BUFFER);  
  47.     msgsnd(msgid, &msg, sizeof(struct msgtype), 0);   
  48.     memset(&msg, '\0', sizeof(struct msgtype));  
  49.     msgrcv(msgid, &msg, sizeof(struct msgtype), 2, 0);  
  50.     fprintf(stderr, "Client receive:%s\n", msg.buffer);  
  51.     exit(0); 
  52. }    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics