多管功能打破了st中的stdin?

时间:2013-05-15 14:21:45

标签: c unix

有些朋友和我正在尝试实现一个完整的shell,我负责多重管道功能。

问题是在函数结束并返回之后,主循环中的read()似乎无休止地读取0个字节并导致无限循环。但是,该功能输出预期的结果。

在花了大约一周的时间尝试调试我的功能之后,我们得出了以下结论:不知何故,我打破了STDIN

什么可能导致这种情况?

为了清晰起见,这是完整的功能减去错误检查。

int do_pipe( t_parser *paser, int fd, t_info *info, int j )
{
    int    status;
    pid_t  pid;
    int    pipefd[ 2 ];

    if ( j == 0 )
    {
        while ( parser->next != NULL )
            parser = parser->next;

        fd = 1;
    }

    if ( parser->prev )
        pipe( pipefd );

    pid = fork();

    if ( pid == 0 )
    {
        if ( parser->prev )
        {
            close( pipefd[1] );
            dup2( pipefd[0], 0 );
            close( pipefd[0] );
        }

        if ( parser->next )
        {
            if ( parser->prev )
                close( pipefd[0] );

            dup2( fd, 1 );
            close( fd );
        }

        my_execve( parser, info->env );
    }
    else
    {
        if ( parser->prev )
            close( pipefd[0] );

        if ( fd != 1 )
            close( fd );

        j++;

        if ( parser->prev )
            do_pipe( parser->prev, pipefd[1], info, j );
            waitpid( pid, &status, 0 );
    }

    return ( 0 );
}

0 个答案:

没有答案