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!