chdir()为什么不工作?

时间:2017-02-20 09:19:54

标签: c linux shell

当我尝试运行./shell cd包含/ 我实际上并没有更改为包含目录。这是我的代码:

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;
}

我没看到我的代码出了什么问题。

2 个答案:

答案 0 :(得分:1)

您无法运行程序来更改其他程序(您的shell)的目录。

会发生什么

  1. 生成一个新程序来运行您的程序
  2. 该程序调用{​​{1}},以更改其当前目录
  3. 程序结束,导致进程死亡
  4. shell仍然是
  5. 的地方

    这就是shell中chdir()是内置命令的原因。

答案 1 :(得分:0)

除非您开发自己的shell,否则无法创建这样的cd命令。

chdir命令有效,但仅限于程序内部。退出后,您将返回到父shell当前目录。