Advertisement
Guest User

Untitled

a guest
Nov 30th, 2015
78
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.69 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <fcntl.h>
  4. #include <sys/types.h>
  5. #include <sys/stat.h>
  6. #include <errno.h>
  7. #include <string.h>
  8. #include <time.h>
  9. #include <unistd.h>
  10. #include <sys/ioctl.h>
  11. #include <sys/ipc.h>
  12. #include <sys/wait.h>
  13. #include <sys/msg.h>
  14.  
  15.  
  16. struct uzenet
  17. {
  18.     int mtype;
  19.     char mtext [1024];
  20. };
  21.  
  22.  
  23. int main()
  24. {
  25.     int pid = 0;
  26.     char varos[30];
  27.     int pfd[2];
  28.     pipe(pfd);
  29.      int uzenetsor, status;
  30.      key_t kulcs = 1234;
  31.    
  32.     //varosokListazasa();
  33.      
  34. uzenetsor = msgget( kulcs, 0600 | IPC_CREAT );
  35.      if ( uzenetsor < 0 ) {
  36.           perror("msgget");
  37.         //  return 1;
  38.      }
  39.    
  40.     pid = fork();
  41.    
  42.     if (pid == 0)  //gyerek
  43.     {
  44.         int count = 0;
  45.         close(pfd[1]);
  46.         while (read(pfd[0], varos, 1) == 1) //read from 0, write to 1
  47.         {
  48.         if (ioctl(pfd[0], FIONREAD, &count) != -1)
  49.             {
  50.                 if (read(pfd[0], varos + 1, count) == count)
  51.                     fprintf(stdout,"Child: received \"%s\"\n", varos); // + 1);
  52.                     close(pfd[0]);
  53.        
  54.                
  55.             }
  56.             else
  57.             {   // could not read in-size
  58.                 perror("Failed to read input size.");
  59.             }
  60.            
  61.         }
  62.        
  63.         //if (1 == varosraSzur(varos))
  64.         //{
  65.             printf("gyerek mondja szallitva\n");
  66.             kuld( uzenetsor, "szallitva" );
  67.     /*  } else {
  68.             printf("gyerek mondja hiba\n");
  69.             kuld( uzenetsor, "hiba" );
  70.         }*/
  71.        
  72.         //waitpid(getppid());
  73.         //varjuk meg a szulot
  74.        
  75.         if ( msgctl( uzenetsor, IPC_RMID, NULL ) < 0 ) {
  76.                perror("msgctl");
  77.         } else {
  78.             printf("uzenetsor torolve\n");
  79.         }
  80.        
  81.         printf("gyerek vegzett\n");
  82.         kill(getpid(), SIGUSR1 );
  83.        
  84.     }
  85.     else //szulo
  86.     {
  87.         close(pfd[0]);
  88.         printf("Melyik varosba szallitsunk?\n");
  89.         scanf("%s", varos);
  90.         write(pfd[1], varos, strlen(varos)+2);
  91.        
  92.    
  93.         if (0 != fogad(uzenetsor))
  94.         {
  95.             //bejegyez(varos);
  96.             printf("bejegyezve");
  97.         } else
  98.         {
  99.             printf("nincs ilyen varos vagy ide mar szallitottunk\n");
  100.         }
  101.         printf("szulo vegzett\n");
  102.        
  103.        
  104.         //kill(getpid());
  105.     }  
  106.    
  107. }
  108.  
  109.  
  110.  
  111. int kuld( int uzenetsor, char varos[30])
  112. {
  113.  
  114.      struct uzenet uz;
  115.      uz.mtype = 5;
  116.      strcpy(uz.mtext, varos);
  117.      int status;
  118.      
  119.      status = msgsnd( uzenetsor, &uz, strlen ( uz.mtext ) + 1 , 0 );
  120.    
  121.      if ( status < 0 )
  122.           perror("msgsnd");
  123.      return 0;
  124. }
  125.      
  126.  
  127. int fogad( int uzenetsor )
  128. {
  129.  
  130.      struct uzenet uz;
  131.      int status;
  132.  
  133.      status = msgrcv(uzenetsor, &uz, 1024, 5, 0 );
  134.      
  135.      if ( status < 0 )
  136.           perror("msgsnd");
  137.      else
  138.      {
  139.        
  140.           printf("A kapott uzenet: %s\n", uz.mtext);
  141.           //
  142.      }
  143.      if (0 == strcmp(uz.mtext,"szallitva"))
  144.      {
  145.         return 1;
  146.     } else return 0;
  147. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement