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

pop*_*lis 1 c linux cd

我的任务是cd在C 语言中对linux 命令进行编程。我认为使用该chdir()方法将是微不足道的,但是我的目录没有更改。有趣的是chdir()的返回状态为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);
Run Code Online (Sandbox Code Playgroud)

ret 返回1。

2。

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

    printf("chdir returned %d.\n", ret);
Run Code Online (Sandbox Code Playgroud)

ret 如果目录在我的路径中,则返回1。

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

Dan*_*our 6

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

因此,当您有类似...的代码时

int main() {
  // 1
  chdir("/"); // error handling omitted for clarity
  // 2
}
Run Code Online (Sandbox Code Playgroud)

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

$ pwd # 3
/home/sweet
$ ./example # 4
$ pwd # 5
/home/sweet
Run Code Online (Sandbox Code Playgroud)

然后,您有两个过程在起作用,

  1. 壳,这是在您输入pwd./example

  2. ./example,由您的编译程序启动(由外壳程序启动)的进程。

chdir()是您已编译程序的一部分,而不是外壳程序的一部分,因此,它仅影响程序的进程,而不影响外壳程序。

所以,在// 1你的程序的工作目录(在上面的例子来看)是/home/sweet,但// 2它是/在指定的chdir()上面的调用。但这不会影响shell以及输出pwd # 5