Advertisement
Guest User

practica1ejerciciof

a guest
Oct 23rd, 2018
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.38 KB | None | 0 0
  1. include<stdio.h>
  2. #include<string.h>
  3. #include<unistd.h>
  4. #include<stdlib.h>
  5. #include<sys/wait.h>
  6. #include<time.h>
  7. #define SEGONSFILL(int) 5
  8. char *color_blue = "\033[01;34m";
  9. char *color_red = "\033[01;31m";
  10. char *color_end = "\033[00m";
  11. int main() {
  12. int estat,i, exitcode;
  13. unsigned int llavor;
  14. char *s;
  15. pid_t pid,fpid;
  16. char cadena[100];
  17. sprintf(cadena,"\n%s[%d] ********** Iniciant PROCES des de %d **********%s\n",color_blue,getpid(),getppid(),color_end);
  18. if((write(1,cadena,strlen(cadena)))==-1)
  19. perror("ERROR: write 1");
  20. pid=fork();
  21. if(pid==-1) {
  22. sprintf(cadena,"%s[%d] Error en l'execució del fork.%s\n",color_blue,getpid(),color_end);
  23. write(2,s,strlen(s));
  24. exit(0);
  25. } else if(pid==0) {
  26. sprintf(cadena,"\t%s[%d] ***** Iniciant proces fill de %d ... ***** %s\n",color_red, getpid (), getppid (), color_end);
  27. write (1, cadena, strlen (cadena));
  28. llavor = (unsigned int) time (NULL);
  29. sprintf(cadena,"\t%s[%d] Estableix llavor [%d]%s\n",color_red, getpid (), llavor, color_end);
  30. write (1, cadena, strlen (cadena));
  31. srand (llavor);
  32. //Establiment de la llavor, diferent en cada execuciC3 per assegurar seq C <C(ncies diferents.for (i = 0; i < SEGONSFILL; i++)
  33. {
  34. sleep (1);
  35. sprintf(cadena,"\t%s[%d] El proces fill acabara en %d segons%s\n",color_red, getpid (), SEGONSFILL - i, color_end);
  36. write (1, cadena, strlen (cadena));
  37. }
  38.  
  39. exitcode = rand () % 10;
  40. // Genera un nombre aleatori entre 0 i 9.
  41. sprintf (cadena, "\t%s[%d] El proces fill ha finalitzat retornant amb codi de finalitzacio [%d]!%s\n", color_red, getpid (), exitcode, color_end);
  42. write (1, cadena, strlen (cadena));
  43. exit (exitcode);
  44. } else {
  45. sprintf(cadena, "%s[%d] PROCES PARE suspen execucio en espera de la
  46. finalitzacio del fill %d ... %s\n", color_blue, getpid (), pid, color_end);
  47. write (1, cadena, strlen (cadena));
  48. if ((fpid = wait (&estat)) == -1)
  49. {
  50. sprintf(cadena,"%s[%d] PROCES PARE no te fills ... %s\n",color_blue, getpid (), color_end);
  51. write(1, cadena, strlen (cadena));
  52. exit (0);
  53. }
  54. sprintf(cadena, "%s[%d] PROCES PARE ha rebut acabament proces fill [%d] amb codi [%d] i acaba. %s\n\n", color_blue, getpid (), fpid, WEXITSTATUS (estat), color_end);
  55. write (1, cadena, strlen (cadena));
  56. exit (0);
  57. }
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement