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.