Linuxの高度なプログラミングの基礎--プロセス間の通信は1つのメッセージキューで複数のプロセスの通信を実現する

3487 ワード

プロセス間通信は1つのメッセージキューで複数のプロセスの通信を実現する
  • プロセスaはプロセスBにhello worldを送信し、プロセスBは印刷を受信し、
  • プロセスcはプロセスdに自分の学号クラスの名前を送信し、プロセスdは印刷を受信し、
  • は同じメッセージキューで
                        a  
    
  • を実現する.
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    struct msg{
      long msg_types;
      char msg_buf[512];
    };
    
    int main()
    {
       key_t key;
       key = ftok (".",5);
       int msgdis;
       if ((msgdis = msgget (key,IPC_CREAT|777)) == -1) { perror("msgget : 
    "); exit(1); } printf (" :%d
    ",msgdis); struct msg pmsg; pid_t pid; pid = getpid(); pmsg.msg_types = pid; printf (" : %d
    ",pid); sprintf (pmsg.msg_buf,"%s","hello world"); int len; len = strlen (pmsg.msg_buf); if ((msgsnd(msgdis,&pmsg,len,0)) == -1) { perror("msgsnd"); exit(1);} return 0; }
                    b   
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define BUFSIZE 4096
    
    struct msg{
      long msg_types;
      char msg_buf[512];
    };
    
    int main()
    {
     int pid,mpid;
       printf ("                
    "); scanf ("%d",&mpid); printf ("
    "); scanf ("%d",&pid); struct msg pmsg; int len; if ( (len = msgrcv(mpid,&pmsg,BUFSIZE,pid,0)) == -1) { perror ("msgrcv : "); exit (1); } pmsg.msg_buf[len] = '\0'; printf ("message text : %s
    ",pmsg.msg_buf); return 0; }
                    c    
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    
    struct msg{
      long msg_types;
      char msg_buf[512];
    };
    
    int main()
    {
       
       int msgdis;
       printf ("            :
    "); scanf ("%d",&msgdis); struct msg pmsg; pid_t pid; pid = getpid(); pmsg.msg_types = pid; printf (" : %d
    ",pid); sprintf (pmsg.msg_buf,"%s"," :1715925506 : : "); int len; len = strlen (pmsg.msg_buf); if ((msgsnd(msgdis,&pmsg,len,0)) == -1) { perror("msgsnd"); exit(1);} return 0; }
                       d    
    
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #include 
    #define BUFSIZE 4096
    
    struct msg{
      long msg_types;
      char msg_buf[512];
    };
    
    int main()
    {
     int pid,mpid;
       printf ("                
    "); scanf ("%d",&mpid); printf ("
    "); scanf ("%d",&pid); struct msg pmsg; int len; if ( (len = msgrcv(mpid,&pmsg,BUFSIZE,pid,0)) == -1) { perror ("msgrcv : "); exit (1); } pmsg.msg_buf[len] = '\0'; printf ("message text : %s
    ",pmsg.msg_buf); return 0; } `` ** , **