繁体   English   中英

在c中编程管道 尝试执行管道命令cd和pwd,但对我来说不起作用

[英]Programming pipes in c. Trying to execute piped commands cd and pwd, but it does not work out for me

所以我正在用C编程管道(以支持多个管道)。 目前,我正在使用硬编码命令对其进行测试。 我试图执行cd命令更改当前工作目录,并尝试执行pwd命令显示新目录。 但这对我不起作用:cd不会更改工作目录,而pwd在项目根目录中显示我的Debug文件夹的旧目录。 如果您向我澄清此问题的原因,我将非常感谢。 谢谢!

这是代码

int main(int argc, const char * argv[]) {    
    char *cd[] = {"cd", "/Users/user01/Desktop", NULL};
    char *pwd[] = {"pwd", NULL};

    char **cmd [] = {cd, pwd, NULL};

    loop_pipe(cmd);
    return 0;
}

void loop_pipe(char ***cmd){

    int   p[2];
    pid_t pid;
    int   fd_in = 0;

    while (*cmd != NULL)
    {
        pipe(p);
        if ((pid = fork()) == -1){
            exit(EXIT_FAILURE);
        }else if (pid == 0){
            dup2(fd_in, 0); //change the input according to the old one
            if (*(cmd + 1) != NULL)
                dup2(p[1], 1);
            close(p[0]);
            execvp((*cmd)[0], *cmd);
            exit(EXIT_FAILURE);
        }else{
            wait(NULL);
            close(p[1]);
            fd_in = p[0]; //save the input for the next command
            cmd++;
        }
    }
}

cd不是程序。 在外壳中,它是内置的。

想想如果不是这种情况会发生什么:新的子进程将更改目录,然后立即退出,不会造成持久更改。 父进程和子进程不共享工作目录。

我怀疑您的目标实际上是更改目录本身 ,但是如果您要更改目录,则必须在父进程中使用chdir()调用“手动”进行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM