C中的cd命令和chdir()的使用

The cd command in C and use of chdir()

我的任务是用 C 语言编写 linux cd 命令。我认为使用 chdir() 方法会很简单,但我的目录没有改变.有趣的是 chdir() 的 return 状态是 0,而不是 -1,这意味着 chdir() 没有失败。这是我使用 chdir():

的两种情况

1.

    char *dir = getenv("HOME");   // Here dir equals the home environment.
    int ret = chdir(dir);

    printf("chdir returned %d.\n", ret);

ret returns 1.

2.

    int ret = chdir(dir);   // Here dir equals the user's input.

    printf("chdir returned %d.\n", ret);

ret returns 1 如果目录存在于我的路径中。

我使用chdir()错了吗?我似乎无法在任何地方找到答案。任何帮助将不胜感激。

chdir() 仅更改调用进程的工作目录。

所以当你有像...

这样的代码时
int main() {
  // 1
  chdir("/"); // error handling omitted for clarity
  // 2
}

... 并将其编译为程序 example 然后 运行 它在 shell:

$ pwd # 3
/home/sweet
$ ./example # 4
$ pwd # 5
/home/sweet

那么你有两个进程在起作用,

  1. shell,这是您输入 pwd./example

  2. 的地方
  3. ./example,用你的编译程序启动的进程(由 shell)。

chdir() 是编译程序的一部分,而不是 shell,因此它只影响程序的进程, shell.

因此,在 // 1 您的程序的工作目录(在上面的示例 运行 中)是 /home/sweet,但在 // 2/如上面的 chdir() 调用中指定的那样。不过,这不会影响 shell 和 pwd # 5 的输出!