c - 为什么 chdir() 不工作?

标签 c linux shell

<分区>

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

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)的目录。

发生的事情是

  1. 生成一个新进程来运行您的程序
  2. 该程序调用 chdir() 来更改其当前目录
  3. 程序结束,导致进程挂掉
  4. shell 还在原处

这就是为什么 cd 在 shell 中是一个内置命令。

关于c - 为什么 chdir() 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42340588/

相关文章:

c语言,标准输出中的额外消息?

c - 将“...”参数传输到其他函数

c - 如何一次将数组中的数字复制到二进制文件中?

c++ - 如何使用strcpy将字符串复制到字符数组中

linux - Nohup:无法从控制台分离

linux - 为什么 WHICH 命令没有给出预期的路径?

c - gcc 4.8.2/ld 2.24 链接失败,gcc 4.4.7/ld 2.20 链接成功

linux - 从 .csv 日志文件中的文本文件中搜索 IP,如果找到,则在其旁边添加新列

arrays - 转换数组日期字符串并在 Shell 脚本中减少 3 小时

java - 如何在 linux 终端的 shell 脚本上运行 jar 文件?