/* Programma di esempio per l'uso delle pipe. * In questo caso semplice il figlio continua * ad inviare dati al padre. */ #include #include #include #include #define __USE_POSIX #include #include #include "myutils.h" /* Dimensione del buffer per la stringa ricevuta * dal processo padre */ #define BUFFSIZE 80 /* Scommentare la linea seguente per vedere scattare la SIGPIPE */ #define DO_SIGPIPE /* Forward declaration */ void handler(int signo); int main(void) { int pipefd[2], i; pid_t child; struct sigaction nuova, vecchia; char scritta[] = "Prova di scrittura nella PIPE"; char local[BUFFSIZE]; /* Installo l'handler della SIGPIPE */ nuova.sa_handler = handler; nuova.sa_flags = 0; sigemptyset(&nuova.sa_mask); if (sigaction(SIGPIPE, &nuova, &vecchia) == -1) sys_err("Errore nell'installazione della SIGPIPE"); printf("Lunghezza del buffer della FIFO %ld\n", sysconf(_PC_PIPE_BUF)); if (pipe(pipefd) == -1) sys_err("Errore nella creazione della pipe"); if ((child = fork()) < 0) sys_err("Errore nella fork"); else if (child == 0) { /* Il processo figlio chiude il descrittore in lettura poiche' sulla pipe deve solo scrivere. */ close(pipefd[0]); /* Ciclo for con cui viene effettuato il passaggio della * stringa. */ for(i=0; i