在自定义shell中使用管道执行多个命令时发生管道错误

时间:2015-08-13 04:14:33

标签: c shell pipe

我正在尝试使用管道在我的自定义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 );

    }

}

0 个答案:

没有答案