[英]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.