当前位置:   article > 正文

4.18 IO

4.18 IO

 1.

#include <sys/types.h>                                                           
 #include <sys/ipc.h>                                                             
 #include <sys/msg.h>                                                             
 #include <stdlib.h>                                                              
 #include <string.h>                                                              
 #include <stdio.h>                                                               
 struct msgbuf                                                                    
 {                                                                                
     long mtype;                                                                  
     char mtext[128];                                                             
 };                                                                               
                                                                                  
 int main(int arg,const char*argv[]){                                             
     key_t key=ftok("/home/dady/作业/1",2);                                       
     if(key<0){                                                                   
         perror("ftok");                                                          
         return -1;                                                               
     }                                                                            
     printf("key=%#x\n",key);                                                     
     int msqid=msgget(key,IPC_CREAT|0777);                                        
     if(msqid<0){                                                                 
         perror("msgget");                                                        
         return -1;                                                               
     }                                                                            
     printf("msqid=%d\n",msqid);                                                  
     struct msgbuf snd;                                                           
     while(1){                                                                    
         printf("消息类型:");                                                    
         scanf("%ld",&snd.mtype);                                                 
         getchar();                                                               
         if(snd.mtype<=0){                                                        
             break;                                                               
         }                                                                        
         printf("消息内容:");                                                    
         fgets(snd.mtext,sizeof(snd.mtext),stdin);                                
         snd.mtext[strlen(snd.mtext)-1]='\0';                                     
         if(msgsnd(msqid,(void*)&snd,sizeof(snd.mtext),0)<0){                     
             perror("msgsnd");                                                    
             return -1;                                                           
         }                                                                        
         printf("发送成功\n");                                                    
         system("ipcs -q");                                                       
                                                                                  
     }                                                                            
     ssize_t res=0;                                                               
     struct msgbuf rcv;                                                           
     while(1){                                                                    
         res=msgrcv(msqid,&rcv,sizeof(rcv.mtext),1,IPC_NOWAIT);                   
         if(res<0){                                                               
             perror("msgrcv");                                                    
             break;                                                               
         }                                                                        
         printf("读取:res:%ld字节 mtype:%ld mtext:%s\n",res,rcv.mtype,rcv.mtext);
     }                                                                            
     if(msgctl(msqid,IPC_RMID,NULL)<0){                                           
         perror("msgctl");                                                        
         return -1;                                                               
     }                                                                            
     printf("队列删除成功\n");                                                    
     system("ipcs -q");                                                           
                                                                                  
     return 0;                                                                    
 }                                                                                
                                                                                  
2.

 #include <stdio.h>
 #include <sys/types.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 #include <stdlib.h>
 #include <string.h>
 
 struct msgbuf
 {
     long mtype;
     char mtext[128];
 };
 
 int main(int arg,const char*argv[]){
     key_t key=ftok("/home/dady/作业/1",2);
     if(key<0){
         perror("ftok");
         return -1;
     }
     printf("key=%#x\n",key);
     int msqid=msgget(key,IPC_CREAT|0777);
     if(msqid<0){
         perror("msgget");
         return -1;
     }
     printf("msqid=%d\n",msqid);
     struct msgbuf snd;
     while(1){
         printf("消息类型:");
         scanf("%ld",&snd.mtype);
         getchar();
         if(snd.mtype<=0){
             break;
         }
         printf("消息内容:");
         fgets(snd.mtext,sizeof(snd.mtext),stdin);
         snd.mtext[strlen(snd.mtext)-1]='\0';
         if(msgsnd(msqid,(void*)&snd,sizeof(snd.mtext),0)<0){
             perror("msgsnd");
             return -1;
         }
         printf("发送成功\n");
         system("ipcs -q");
 
     }
     ssize_t res=0;
     struct msgbuf rcv;
     while(1){
         res=msgrcv(msqid,&rcv,sizeof(rcv.mtext),2,IPC_NOWAIT);
         if(res<0){
             perror("msgrcv");
             break;
         }
         printf("读取:res:%ld字节 mtype:%ld mtext:%s\n",res,rcv.mtype,rcv.mtext);
     }
     return 0;
 }
 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/466336
推荐阅读
相关标签
  

闽ICP备14008679号