如何在Linux中使用chdir函数?

pyt*_*on3 0 c unix linux chdir

我有一个问题,这是我在testchdir.c文件中的原始代码:

#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>

int main(int argc,char **argv) 
{ 
    if (argc < 2)
    {
        printf("Usage: %s <pathname\n",argv[0]);
        exit(1);
    }

    if (chdir(argv[1]) == 0)
    {
        printf("success in chdir\n");
        return 0;
    }
    else
    {
        printf("error happened");
        exit(1);
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的Linux系统中,我的原始路径是/home/Tom3543,然后当我使用上面的代码编译时gcc -o testchdir testchdir.c,它看起来很好.后来,我想改变我的路径并执行程序,所以我输入

./testchdir /home/tom3543/C++
Run Code Online (Sandbox Code Playgroud)

"chdir的成功"出现在我的终端,但我的路径仍然是/ home/Tom3543在我的终端.有人能帮我解释一下原因吗?我很困惑!

Som*_*ude 9

这是因为shell 为您的程序启动了一个进程,并且您只更改了该新进程中的当前目录.shell进程不受影响.

不幸的是(对你而言)没有真正好的(或合法的)方法来改变父进程的工作目录(shell的进程).

  • 这也是为什么`cd`不是外部程序而是内置于shell本身的原因. (5认同)
  • 不是"不幸"恕我直言 - 想象一下如果运行命令可能会改变你的工作目录! (2认同)