C中的cd命令和chdir()

时间:2019-05-07 22:13:42

标签: c linux cd

我的任务是在C语言中对linux cd命令进行编程。我认为使用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);

ret返回1。

2。

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

    printf("chdir returned %d.\n", ret);
如果目录在我的路径中,则

ret返回1。

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

1 个答案:

答案 0 :(得分:5)

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. ./example,该过程由外壳程序通过编译程序启动。

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

因此,在// 1,程序的工作目录(在上面的示例中是运行)是/home/sweet,但是在// 2,它是/,在{{ 1}}上方。不过,这不会影响chdir()的外壳和输出!