파이프를 구현했는데 ls -l|grep ^d|wc -l 이상해요.

제목처럼 ls -l|grep ^d|wc -l을 구현했습니다만
분명 하위디렉토리를 가지고 있는데 최종결과가 0으로 나옵니다.
뭐가 잘못됐는지 모르겠습니다....
#include
#include
#include
#include
#include
#include
char *cmd1[] = { "ls" , "-l" , (char*) 0 };
char *cmd2[] = { "grep" , "^d" , (char*) 0 };
char *cmd3[] = { "wc" , "-l" , (char*) 0 };
int main( int argc , char *argv[] )
{
pid_t pid , pid1 , i;
int fd0[2];
int fd[2];
pid = fork();
pipe ( fd0 );
if ( pid == 0 ) /* Child */
{
close ( fd0[0] );
pid1 = fork();
i = pipe(fd);
if ( i == -1 )
perror("pipe fail");
if (pid1 == 0 ) /* Grand Child */
{
close ( fd0[1] );
close ( fd[0] );
dup2 ( fd[1] , 1 );
/* execvp( cmd1[0] , cmd1 ); */
execl( "/usr/bin/ls" , "ls" , "-l" , (char *) 0 );
perror("Grand Child exec fail");
}
else if (pid1 > 0 ) /* Child */
{
close ( fd[1] );
dup2 ( fd[0] , 0 );
dup2 ( fd0[1] , 1 );
execvp( cmd2[0] , cmd2 );
perror("Child exec fail");
}
else
{
}
}
else if ( pid > 0 ) /* Parent */
{
close ( fd0[1] );
dup2 ( fd0[0] , 0 );
execvp ( cmd3[0] , cmd3 );
}
else
{
}
return 0;
}
댓글 달기