C / C ++ fork(),pipes()和execvp()问题

时间:2019-10-05 05:47:39

标签: c++ c linux shell pipe

我正在尝试开发一个简单的Unix shell模拟。我认为我目前停留的部分是了解execvp的工作方式。我试图对此进行一些研究,但运气不佳。

基本上,我正在使用fork()和管道创建子进程。我将STDOUT重定向到管道的写入fd。最后,我从子进程中调用我的execvp。我的execvp()调用只是一个输出简单字符串的程序。

然后,我尝试从父级读取此字符串,并将其用作第二个execvp()程序的输入。该程序仅输出其读入的内容。

我遇到的问题是从execvp()调用了我的第一个程序,然后它只是将字符串直接输出到终端。

我想我的问题是,是否创建了用execvp()执行的程序而不携带程序的STDOUT(我的管道写结束)?如果没有,我将如何强制将其写入管道而不是终端?我可以将我的execvp放在写呼叫中吗?

else if(commandLine[i] == "|"){ 
            pid_t pid2;
            pid2 = fork();
            t = i;
            if (pid2 == 0){ // in child of child 
                close(pipe1fd[0]);
                dup2(pipe1fd[1], STDOUT_FILENO);
                execvp(commandLine[i-1], commandLine);
            }
            else{
                close(pipe1fd[1]);
                dup2(pipe1fd[0], STDIN_FILENO);
                wait(0);
                execvp(commandLine[i+1], commandLine);
                goto BACK;
            }
        }

0 个答案:

没有答案