chdir()不影响环境变量PWD

5 c linux chdir

当我使用chdir()更改当前工作目录时,为什么getenv("PWD")不提供当前工作目录?我还需要setenv("PWD",newDir,1)吗?

void intChangeDir(char *newDir)
{
    if( chdir(newDir)==0 )              
    {
        printf("Directory changed. The present working directory is \"%s\" \"%s\"\n",getenv("PWD"),getcwd(NULL,0));
    }
    else
    {
        printf("Error changing dir %s\n",strerror(errno));      
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:(可执行文件的位置是/ home/user)

changeir/boot

目录已更改.目前的工作目录是"/ home/user""/ boot"

caf*_*caf 6

是的,如果要更改环境变量,则必须明确地执行此操作.

它是PWD在正常的事件运行中设置和更新的shell ,因此它只反映shell已知的当前目录的更改.

  • PWD是外壳程序中的工作目录。C程序具有不同的工作目录-它从与调用Shell相同的目录开始,然后chdir更改C程序的工作目录vut不会影响Shell的目录 (2认同)
  • @crypto:环境变量不是魔术.它们只在应用程序显式更改它们时才会更改,因此如果您的应用程序永远不会更改`PWD`,那么`PWD`的含义是"应用程序启动时的当前目录". (2认同)