管道在一个循环C

时间:2015-11-09 04:23:58

标签: c shell pipe

我正在处理一个可以处理管道的shell。我现在遇到的问题是,当两个人完成执行我的shell退出后找到一个管道。这是一些示例代码,我一直在努力尝试和计算

int main(int argc, char** argv)
{
    int fd[2];
    pid_t pid;
    pid_t pid2;
    int childSt;
    int hell;
    struct arguments args;
    char line[1024];

    while (fgets(line, 1024, stdin)) {
        line[strlen(line)-1] = '\0';
        //////////////////////////////////////////////////////////////          /
        args = finArgs(line);
        pipe(fd);
        pid = fork();
        if (pid > 0)       // PARENT 
        {
            pid2 = fork();
            if(pid2 == 0){
                close(fd[1]);   //close write end 
                if (fd[0] != STDIN_FILENO) 
                {
                    if ((dup2(fd[0], STDIN_FILENO)) != STDIN_FILENO)
                    {
                        printf("dup2 error to stdin\n");
                        close(fd[0]);   
                    }
                }
                if (execvp(args.pipeArgs[0], args.pipeArgs) < 0)
                    printf("parent error \n");                
            }
            else {
                wait(&childSt);
            }
        }

        else    // CHILD
        {
            close(fd[0]);
            if (fd[1] != STDOUT_FILENO)
            {
                if ((dup2(fd[1], STDOUT_FILENO)) != STDOUT_FILENO)
                {
                    printf("dup2 error to stdout\n");
                    close(fd[1]);
                }
            }
            if (execvp(args.args[0], args.args) < 0)
                printf("child error \n");   
        }
    }
    return(0);
}

这是一些示例输出

ls | wc
     14      14     123

这就是我想要的,但程序会退出。

0 个答案:

没有答案