Advertisement
Guest User

Untitled

a guest
Feb 19th, 2020
106
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.76 KB | None | 0 0
  1. /* Copyright(c) 2020
  2. * Avesani Dennis
  3. *
  4. * 1° segnale: 23. SIGURG
  5. * 2° segnale: 3. SIGQUIT
  6. */
  7.  
  8. #include "es3.h"
  9.  
  10. int main() {
  11. int figlio1, figlio2, n;
  12. char buffer[BUF];
  13. char const * PRIMO_FILE = "es3a.txt";
  14. char const * SECONDO_FILE = "es3b.txt";
  15.  
  16. // gestione CONTROL: vedi funzione in fondo
  17. signal(SIGINT, SIG_IGN);
  18. signal(SIGSTOP, SIG_IGN);
  19.  
  20. if(!(figlio1 = fork())) {
  21. // codice figlio1, che dovrà gestire solo i timer
  22.  
  23. // timer di durata TIMER1s
  24. signal(SIGALRM, primaLettura);
  25. alarm(TIMER1);
  26. // secondo timer scritto in primaLettura
  27.  
  28. } else {
  29. // codice padre, che dovrà tenere sotto controllo i timer per dare
  30. // ordini al figlio2
  31.  
  32. // pipe per figlio2 e chiusura scrittura
  33. int pipe[2];
  34. close(pipe[1]);
  35.  
  36. // attende primo segnale
  37. pause();
  38.  
  39. // sveglia secondo figlio per la prima lettura
  40. kill(figlio2, SIGUSR1);
  41.  
  42. // apertura e lettura da pipe del primo file, con chiusura
  43. int fd = open(PRIMO_FILE, O_RDONLY);
  44. while((n = read(pipe[0], buffer, BUF)) > 0) {
  45. write(1, buffer, n);
  46. close(fd);
  47. }
  48.  
  49. pause();
  50.  
  51. // sveglia secondo figlio per la seconda lettura
  52. kill(figlio2, SIGUSR2);
  53.  
  54. // apertura e lettura da pipe del secondo file, con chiusura
  55. fd = open(SECONDO_FILE, O_RDONLY);
  56. while((n = read(pipe[0], buffer, BUF)) > 0) {
  57. write(1, buffer, n);
  58. close(fd);
  59. }
  60.  
  61. /* SERVE (?)
  62. kill(figlio1, 9);
  63. kill(figlio2, 9);*/
  64.  
  65. if(!(figlio2 = fork())) {
  66. // codice figlio2, che dovrà gestire lettura file con pipe
  67.  
  68. // chiusura pipe in lettura
  69. close(pipe[0]);
  70.  
  71. // aspettando il segnale della prima lettura dal padre
  72. pause();
  73.  
  74. // segnale arrivato, leggo primo file e scrivo su pipe
  75. while((n = read(fd, buffer, BUF)) > 0) {
  76. write(pipe[1], buffer, n);
  77. }
  78.  
  79. // inizio a leggere dal file, aspetto però il segnale per mandarlo alla pipe
  80. while((n = read(fd, buffer, BUF)) > 0) {
  81. pause();
  82. write(pipe[1], buffer, n);
  83. }
  84. }
  85. }
  86. }
  87.  
  88. void ctrl() {
  89. write(1, "\n[!] E' stato premuto un tasto CTRL.\n", 38);
  90. }
  91.  
  92. void primaLettura() {
  93. // sveglia il padre per la prima volta
  94. // e imposta timer di durata TIMER2s
  95. write(1, "we zio", 6);
  96. kill(getppid(), 23);
  97. signal(SIGALRM, secondaLettura);
  98. alarm(TIMER2);
  99. }
  100.  
  101. void secondaLettura() {
  102. // sveglia il padre per la seconda volta
  103. kill(getppid(), 3);
  104. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement