Advertisement
Gianvy

[C] PadreFigliMultipliConSalvataggioPID.c

Apr 27th, 2018
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.17 KB | None | 0 0
  1. a:padreFigliMultipliConSalvataggioPID.c
  2.     gcc -Wall -o p padreFigliMultipliConSalvataggioPID.c
  3.  
  4. // ============================ ESERCIZIO 4 PARTE C ==================
  5. #include <stdlib.h>
  6. #include <stdio.h>
  7. #include <unistd.h>
  8. #include <fcntl.h>
  9. #include <sys/wait.h>
  10. #include <time.h>
  11.  
  12. int mia_random(int n)
  13. {
  14.     return rand() % n;
  15. }
  16.  
  17. int main(int argc, char** argv)
  18. {
  19.     srand(time(NULL));
  20.  
  21.     if(argc != 2)
  22.     {
  23.         printf("Passare esattamente 1 parametro\n");
  24.         exit(1);
  25.     }
  26.     int N = atoi(argv[1]);
  27.     if(N <= 0 || N >= 255)
  28.     {
  29.         printf("N deve essere compreso tra 0 e 255, estremi esclusi.\n");
  30.         exit(2);
  31.     }
  32.     int i;
  33.     int *arr = malloc(sizeof(int) * N);
  34.     for(i = 0; i < N; i++)
  35.     {
  36.         int pid = fork();
  37.         if(pid == 0)
  38.         {
  39.             int ritchild = mia_random(100+1) + i;
  40.             exit(ritchild);
  41.         }
  42.         arr[i] = pid;
  43.     }
  44.     for(i = 0; i < N; i++)
  45.     {
  46.         int status;
  47.         int pidritorno = wait(&status);
  48.         int ordine;
  49.         int j;
  50.         for(j = 0; j < N; j++)
  51.         {
  52.             if(arr[j] == pidritorno)
  53.             {
  54.                 ordine = j;
  55.             }
  56.         }
  57.         status = (status >> 8) & 0xFF;
  58.         printf("PADRE: processo figlio terminato. PID=%d,ST=%d,ord=%d\n", pidritorno, status, ordine);
  59.     }
  60.     free(arr);
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement