Advertisement
Geralt1001

Untitled

Feb 13th, 2016
64
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.93 KB | None | 0 0
  1. #include <stdio.h>                  /* WNEK MICHAL - 256848*/
  2. #include <unistd.h>
  3. #include <string.h>
  4. #include <cstdlib>
  5. #include <errno.h>
  6. #include <sys/types.h>
  7. #include <sys/wait.h>
  8. #include <sys/stat.h>
  9. #include <fcntl.h>
  10. #include <stdbool.h>
  11.  
  12. int main(int argc,char* argv[])
  13. {
  14.     int count=argc-1;
  15.    
  16.     struct server
  17.     {
  18.         pid_t pid;
  19.         char *port;
  20.         int state;
  21.     };
  22.     int flag=0;
  23.     //pid_t server_son[count];
  24.     server server_son[count];
  25.    
  26.     for (int i = 0; i < count; i++)
  27.     {
  28.         switch (server_son[i].pid = fork())
  29.         {
  30.             case -1:
  31.                 perror("Fatal Error! - son's fork\n");
  32.                 printf("errno = %d \n", errno);
  33.                 exit(1);
  34.                 break;
  35.             case 0:
  36.                 server_son[i].port=argv[i+1];
  37.                 if(execl("./pserv","pserv",server_son[i].port,NULL)<0)
  38.                 {
  39.                     perror("Fatal Error! - execl\n");
  40.                     exit(1);
  41.                 }
  42.                 //return 0;
  43.                 break;
  44.            
  45.         }
  46.     }
  47.     pid_t pid;
  48.  
  49.     for(int i=0;i<argc;i++)
  50.     {
  51.         server_son[i].state=0;
  52.     }
  53.    
  54.    
  55.     while(flag<argc-1)
  56.     {
  57.         for(int i=0;i<argc;i++)
  58.         {
  59.             printf("IIIIIII: %d\n",i);
  60.             if(server_son[i].state==0)
  61.             {
  62.                 waitpid(server_son[i].pid, &server_son[i].state, 0);  // Parent process waits here for child to terminate.
  63.  
  64.                 switch (server_son[i].state)
  65.                 {
  66.                     case 0:
  67.                         switch (server_son[i].pid = fork())
  68.                         {
  69.                             case -1:
  70.                                 printf("Error - fork, errno = %d \n", errno);
  71.                                 exit(1);
  72.                                 break;
  73.                             case 0:
  74.                                 server_son[i].port=argv[i+1];
  75.                                 printf("\t\t\tflaga= %d\n\n",flag);
  76.                                 printf("\t\tport= %s\n\n",server_son[i].port);
  77.                                 if(execl("./pserv","pserv",server_son[i].port,NULL)<0)
  78.                                 {
  79.                                     perror("Fatal Error! - execl\n");
  80.                                     exit(1);
  81.                                 }
  82.                                 //return 0;
  83.                                 break;
  84.                         }
  85.                         break;
  86.                     case 1:
  87.                         server_son[i].state=1;
  88.                         flag++;
  89.                         printf("\t\t\tflaga= %d\n\n",flag);
  90.                         break;
  91.                 }
  92.             }
  93.         }
  94.     }
  95.  
  96.     printf("End of work with %d parameters\n",argc-1);
  97.     return 0;
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement