Ciao a tutti,
sto iniziando a programmare con le pipe e volevo realizzare il programma:
who | wc -l
il codice e' questo:
codice:
#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;
}
quando lo mando in esecuzione si blocca, cioe' resta in attesa e non scrive niente e devo terminarlo con ctrl+c
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!