我正在尝试使用管道在我的自定义shell中执行多个命令。虽然代码没有显示任何错误,但终端只是挂起而没有任何输出。我的代码段如下:
void exe_pipe(char *pipe1[])
{
int pipe_end[2*l], n=0;
for( i = 0; i < l; i++ ) {
pipe ( pipe_end + i*2 );
}
for( m = 0; m < (l+1); m++ ) // l is no. of pipes
{
pid = fork();
if( pid == 0 )
{
if ( m > 0 )
dup2( pipe_end[ (n-1)*2] , 0 );
if ( m < (l+1) )
dup2( pipe_end[ (n*2)+1] , 1 );
execlp( pipe1[m], pipe1[m], (char*)NULL );
}
}
for( i = 0; i < 2 * l; i++ )
{
close( pipe_end[i] );
}
while(waitpid(-1, NULL, 0) != -1);
}
好的,我想我明白了。我的编辑:
for( m = 0; m < l+1; m++ )
{
pid = fork();
if( pid == 0 )
{
if ( m > 0 )
{
dup2( pipe_end[ (m-1)*2 ] , 0 );
}
if ( m < (l+1) )
{
dup2( pipe_end[ (m*2)+1 ] , 1 );
}
for(i = 0; i < 2 * l; i++){
close(pipe_end[i]);}
execlp( pipe1[m], pipe1[m], (char*)NULL );
}
}