Ciao a tutti,
sto iniziando a programmare con le pipe e volevo realizzare il programma:
who | wc -l
il codice e' questo:
quando lo mando in esecuzione si blocca, cioe' resta in attesa e non scrive niente e devo terminarlo con ctrl+ccodice:#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <fcntl.h> #include <errno.h> #include <sys/wait.h> int main( int argc, char *argv[] ) { pid_t pid; int pipein[2], pipeout[2]; int retval; retval = pipe( pipein ); retval = pipe( pipeout ); pid = Fork(); if( pid == 0 ) /* Primo Figlio */ { close( pipein[1] ); dup2( pipein[0], STDIN_FILENO ); close( pipeout[0] ); dup2( pipeout[1], STDOUT_FILENO ); if( execlp( "/usr/bin/who", "who", NULL ) == -1 ) { perror("exec" ); exit(errno); } } close( pipein[1] ); waitpid( pid, NULL, 0 ); pid = Fork(); if( pid == 0 ) /* Secondo Figlio */ { close( pipeout[1] ); dup2( pipeout[0], STDIN_FILENO ); if( execlp( "/usr/bin/wc", "wc", "-l", NULL ) == -1 ) { perror("exec"); exit(errno); } } close( pipeout[0] ); waitpid( pid, NULL, 0 ); return 0; }
Ho provato a vedere se la who funzionava, e funzione. Cioe' se stampo nella seconda fork() pipeout[0] effettivamnte c'e' il risoltato della who, quindi il problema credo sitia nella cw, potete aiutarmi?
Grazie!

Rispondi quotando