[ANSI C][LINUX] Procesy Potomne: fork

  1. Napisać program wypisujący identyfikatory UID, GID, PID, PPID i PGID dla danego procesu.
  2. Wywołać funkcję fork 3 razy (np. w pętli) i wypisać powyższe identyfikatory dla wszystkich procesów potomnych.
  3. Wstawić funkcję sleep tak, aby procesy pojawiały się na ekranie grupowane pokoleniami od najstarszego do najmłodszego.
  4. Na podstawie wyników programów narysować "drzewo genealogiczne" tworzonych procesów (z zaznaczonymi identyfikatorami).

BARDZO PROSZĘ O KOPIOWANIE Z GŁOWĄ, JEŚLI JUŻ KTOŚ MUSI(ALE RADZĘ PISAĆ SAMEMU), BO ZA PLAGIATY NA UJ WYWALAJĄ Z KURSU I A JAK OPIEKUN SIEZIRYTUJE TO I ZE STUDIÓW :)
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. /*plik naglowkowy procesy.h*/
  2. #ifndef _PROCESY_H
  3. #define _PROCESY_H
  4. /*mini biblioteka trzymajaca prototyp funkcji*/
  5.  
  6. /*funkcja wypisuje identyfikaory  UID, GID, PID, PPID i PGRP ;*/
  7. void procesy(void);
  8. #endif
  9.  
  10. /*koniec pliku naglowkowego*/
  11.  
  12. /*procesy.c*/
  13. #include<stdio.h>
  14. #include<sys/types.h>
  15. #include<unistd.h>
  16. #include<stdlib.h>
  17. #include<sys/wait.h>
  18. #include"procesy.h" /*mini biblioteka*/
  19.  
  20.  
  21. void procesy();
  22.  
  23. int main()
  24. {
  25.  /*wypisuje ID procesow*/
  26. procesy();
  27. return 0;
  28. }
  29. /*koniec wypisz.c*/
  30. /*początek funkcja.c*/
  31. #include<stdio.h>
  32. #include<sys/types.h>
  33. #include<unistd.h>
  34. #include<stdlib.h>
  35. #include<sys/wait.h>
  36. #include"procesy.h" /*mini biblioteka*/
  37.  
  38. /*funkcja wypisujaca ID procesow*/
  39. void procesy(){
  40. printf(" UID = %i\n GID = %i\n PID = %i\n PPID = %i\n PGRP = %i\n\n", getuid(), getgid(), getpid(),getppid(),getpgrp() ) ;
  41.  
  42. }
  43.  
  44. /*koniec wypisz.c*/
  45.  
  46. /*poczatek fork.c*/
  47.  
  48. #include<stdio.h>
  49. #include<sys/types.h>
  50. #include<unistd.h>
  51. #include<stdlib.h>
  52. #include<sys/wait.h>
  53. #include"procesy.h" /*mini biblioteka*/
  54.  
  55.  
  56. void procesy();
  57.  
  58. int main(){
  59. int i=0;
  60. procesy(); /*proces matka*/
  61. do {
  62.     switch( fork() ) {
  63.         case -1 : /*obsluga bledow*/
  64.             perror("Blad funkcji fork") ;
  65.             exit(EXIT_FAILURE) ;
  66.             break;
  67.         case 0 : /*wyroznia potomkow*/
  68.             if(i == 0) {
  69.                     printf("------------1");
  70.                         }
  71.             else if(i == 1) {
  72.                     printf(" ++++++++++++2");
  73.                         }
  74.                
  75.             else if(i == 2) {
  76.                     printf(" ***********3");
  77.                         }  
  78.             procesy();
  79.             break ;
  80.         default :  
  81.             wait(0);           
  82.             break ;
  83.         }
  84.        
  85.         i++ ;
  86.     }while(i < 3) ;
  87.  
  88. return 0;
  89. }
  90. /*koniec fork.c*/
  91. /*grupuj.c*/
  92. #include<stdio.h>
  93. #include<sys/types.h>
  94. #include<unistd.h>
  95. #include<stdlib.h>
  96. #include<sys/wait.h>
  97. #include"procesy.h" /*mini biblioteka*/
  98.  
  99.  
  100.  
  101. void procesy();
  102.  
  103. int main(){
  104. int i=0;
  105. procesy(); /*proces matka*/
  106. do {   
  107.     switch( fork() ) {
  108.         case -1 : /*obsluga bledow*/
  109.             perror("Blad funkcji fork//brak potomka") ;
  110.             exit(EXIT_FAILURE) ;
  111.             break;
  112.         case 0 : /*wyroznia potomkow*/
  113.             if(i == 0) {
  114.                     printf("------------1");
  115.                         }
  116.             else if(i == 1) {
  117.                     printf(" ++++++++++++2");
  118.                         }          
  119.             else if(i == 2) {
  120.                     printf(" ***********3");
  121.                     }
  122.             procesy();
  123.             sleep(2);
  124.             break ;
  125.         default :
  126.             sleep(2);
  127.             break ;
  128.     }  
  129.         i++ ;
  130.     }while(i < 3) ;
  131.  
  132. return 0;
  133. }
  134.  
  135. /*koniec grupuj.c*/
  136. /*drzewko procesow*/
  137.             (3)
  138. |           /
  139. |----------------------(1)     
  140. |           \  
  141. (matka)-(3)     (2)-(3)
  142. |
  143. |----(2)---(3)
  144. |
  145.  
  146. 1 - pierwsze pokolenie
  147. 2 - drugie    -||-
  148. 3 - trzecie   -||-

Komentarze

Prześlij komentarz

Popularne posty z tego bloga

[c++] Lista wskaznikowa

[c++] słowniki - haszowanie - haszowanie otwarte

[ANSI C][LINUX] Wysyłanie i obsługa sygnałów