我的任务是用c语言编写linuxcd命令,我认为使用chdir()方法会很简单,但我的目录不会改变。有趣的是chdir()的返回状态是0,而不是-1,这意味着chdir()没有失败。下面是我使用chdir()的两个案例:
一。

    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()仅更改调用进程的工作目录。
所以当你有像…

int main() {
  // 1
  chdir("/"); // error handling omitted for clarity
  // 2
}

…把它编译成一个程序,然后在shell中运行:
$ pwd # 3
/home/sweet
$ ./example # 4
$ pwd # 5
/home/sweet

你有两个过程在起作用,
您输入examplepwd的shell
./example,使用编译程序启动的进程(由shell启动)。
./example是编译程序的一部分,而不是shell,因此它只影响程序的进程,而不是shell。
因此,在chdir()处,程序的工作目录(在上面的示例运行中)是// 1,但在/home/sweet处,它是// 2,如上面的/调用所指定。但这并不影响shell和chdir()的输出!

关于c - C语言中的cd命令和chdir()的使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56031104/

10-10 22:10