Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Copyright(c) 2020
- * Avesani Dennis
- *
- * 1° segnale: 23. SIGURG
- * 2° segnale: 3. SIGQUIT
- */
- #include "es3.h"
- int main() {
- int figlio1, figlio2, n;
- char buffer[BUF];
- char const * PRIMO_FILE = "es3a.txt";
- char const * SECONDO_FILE = "es3b.txt";
- // gestione CONTROL: vedi funzione in fondo
- signal(SIGINT, SIG_IGN);
- signal(SIGSTOP, SIG_IGN);
- if(!(figlio1 = fork())) {
- // codice figlio1, che dovrà gestire solo i timer
- // timer di durata TIMER1s
- signal(SIGALRM, primaLettura);
- alarm(TIMER1);
- // secondo timer scritto in primaLettura
- } else {
- // codice padre, che dovrà tenere sotto controllo i timer per dare
- // ordini al figlio2
- // pipe per figlio2 e chiusura scrittura
- int pipe[2];
- close(pipe[1]);
- // attende primo segnale
- pause();
- // sveglia secondo figlio per la prima lettura
- kill(figlio2, SIGUSR1);
- // apertura e lettura da pipe del primo file, con chiusura
- int fd = open(PRIMO_FILE, O_RDONLY);
- while((n = read(pipe[0], buffer, BUF)) > 0) {
- write(1, buffer, n);
- close(fd);
- }
- pause();
- // sveglia secondo figlio per la seconda lettura
- kill(figlio2, SIGUSR2);
- // apertura e lettura da pipe del secondo file, con chiusura
- fd = open(SECONDO_FILE, O_RDONLY);
- while((n = read(pipe[0], buffer, BUF)) > 0) {
- write(1, buffer, n);
- close(fd);
- }
- /* SERVE (?)
- kill(figlio1, 9);
- kill(figlio2, 9);*/
- if(!(figlio2 = fork())) {
- // codice figlio2, che dovrà gestire lettura file con pipe
- // chiusura pipe in lettura
- close(pipe[0]);
- // aspettando il segnale della prima lettura dal padre
- pause();
- // segnale arrivato, leggo primo file e scrivo su pipe
- while((n = read(fd, buffer, BUF)) > 0) {
- write(pipe[1], buffer, n);
- }
- // inizio a leggere dal file, aspetto però il segnale per mandarlo alla pipe
- while((n = read(fd, buffer, BUF)) > 0) {
- pause();
- write(pipe[1], buffer, n);
- }
- }
- }
- }
- void ctrl() {
- write(1, "\n[!] E' stato premuto un tasto CTRL.\n", 38);
- }
- void primaLettura() {
- // sveglia il padre per la prima volta
- // e imposta timer di durata TIMER2s
- write(1, "we zio", 6);
- kill(getppid(), 23);
- signal(SIGALRM, secondaLettura);
- alarm(TIMER2);
- }
- void secondaLettura() {
- // sveglia il padre per la seconda volta
- kill(getppid(), 3);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement