[C] System calls wait

Messaggioda JoKeRxbLaCk » 19/02/2017, 12:37

Ciao a tutti sto provando a risolvere un esercizio relativo alle system calls.
Il problema è il seguente:
"Scrivere un programma C in cui un processo P crea un figlio F. Il processo P deve leggere delle “frasi” digitate da tastiera, lunghe a piacimento (si considera terminata la frase quando l’utente preme il tasto invio), ed inviarle di volta in volta tramite una PIPE al figlio F. Il figlio F ogni frase che riceve dalla PIPE la stampa a video. Se il figlio F non riceve nulla per 60 secondi deve inviare un segnale SIGUSR1 al padre P e terminare; Il padre P ricevuto il segnale SIGUSR1 deve stampare a video
“tempo scaduto” e terminare."


Il pezzo di codice che ho sviluppato fino ad ora è il seguente:
Codice:
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/wait.h>

int main(int argc, char *argv[]){

   pid_t pid;
   int mypipefd[2];
   int ret, ret2;
   int dim_buffer = 100;
   char buf[dim_buffer];
   unsigned int alarm = 10;
   
   ret = pipe(mypipefd);

   if(ret == -1){
      perror("pipe");
      exit(1);
   }

   pid = fork();
   
   if(pid == 0) {
      while(1){
         //CHILD PROCESS
         read(mypipefd[0], buf, dim_buffer);
         printf("|Child Process| stampa della frase: %s\n", buf);
      }
   } else {
      //PARENT PROCESS
      while(1) {
         ret2 = read(0, buf, dim_buffer);
         write(mypipefd[1], buf, dim_buffer);
      }
   }
   return 0;
}



Il problema che ho riscontrato è nel contare i 60 secondi prima di inviare il segnale SIGUSR, ovvero questo passo: "Se il figlio F non riceve nulla per 60 secondi deve inviare un segnale SIGUSR1 al padre P e terminare; Il padre P ricevuto il segnale SIGUSR1 deve stampare a video “tempo scaduto” e terminare." Come faccio a contare tot secondi? Ho trovato la funzione wait() ma non riesco a capirne il funzionamento leggendo dal man di linux e anche guardando sui vari siti web. Potete aiutarmi? Grazie mille.
JoKeRxbLaCk
Junior Member
Junior Member
 
Messaggio: 119 di 250
Iscritto il: 06/06/2015, 09:17

Re: [C] System calls wait

Messaggioda Albesa81 » 19/02/2017, 15:52

La funzione wait rileva il cambiamento di stato di un processo figlio, come spiegato esaurientemente qui. Quello che cerchi tu è probabilmente qualcosa come https://linux.die.net/man/2/alarm o https://linux.die.net/man/2/setitimer.
Albesa81
Junior Member
Junior Member
 
Messaggio: 80 di 341
Iscritto il: 21/12/2010, 12:02


Torna a Informatica

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite