为什么不是';t chdir()工作吗?
当我尝试运行时。/shell cd包含/ 我实际上并没有切换到includes目录。这是我的密码:为什么不是';t chdir()工作吗?,c,linux,shell,C,Linux,Shell,当我尝试运行时。/shell cd包含/ 我实际上并没有切换到includes目录。这是我的密码: int cd(char *path) { printf("i got there at least\n"); if(path == NULL) { printf("dont waork\n"); print_usage(); } else { prin
int cd(char *path) {
printf("i got there at least\n");
if(path == NULL) {
printf("dont waork\n");
print_usage();
} else {
printf("print please\n");
int dir_change = chdir(path);
if(dir_change != 0)
print_no_directory(path);
}
return 1;
}
int shell(int argc, char *argv[]) {
pid_t pid;
int status;
pid = fork();
if(pid == 0) {
execl("cd", argv[0], argv[1], argv[2], (char*)NULL);
printf("argv[1]: %s\n", argv[1]);
if(!strcmp(argv[1], "cd")) {
cd(argv[2]);
}
} else if(pid > 0) {
waitpid(pid, &status, WUNTRACED);
} else {
print_fork_failed();
}
return 0;
}
我看不出我的代码有什么问题。你不能运行一个程序来更改另一个程序(你的shell)的目录 发生的是
chdir()
,以更改其当前目录这就是为什么shell中的
cd
是一个内置命令。除非开发自己的shell,否则无法创建这样的cd
命令
chdir
命令可以工作,但只能在程序内部工作。退出后,您将返回到父shell当前目录。我尝试分叉进程,但仍然不起作用:/@franklinsing不,当然不行,fork()
的目的是创建一个新进程。更改新进程的当前目录将永远不会“继承回”其父进程,这是我的观点。啊,我明白你的意思,谢谢!