お話の途中で申し訳ないですが、質問させてください。
今Unixシステムコールでパイプを使う練習してるのですが、
下のように書くと親プロセスがread()のあたりで止まってしまいます。
これはなぜなんでしょうか。

int main(int argc, char ** argv)
{
pid_t pid = fork() ;
int fd[2] ;
pipe(fd) ;

if( pid == 0 )
{
close(1) ;
dup2(fd[1],1) ;
execlp("echo","echo","hoge",NULL) ;
}
else if( pid > 0 )
{
int status ;
close(0) ;
dup2(fd[0],0) ;
waitpid(pid,&status,0) ;
char buffer[10] = {'\0'} ;
read(0,buffer,sizeof(buffer)) ; // ここで止まる
printf("%s",buffer) ;
printf("end\n") ;
}
return 0 ;
}