chdir()不影响环境variablesPWD

当我使用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)); } } 

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

changedir / boot

目录已更改。 目前的工作目录是“/ home / user”“/ boot”

是的,如果你想改变环境变量,你必须明确地做到这一点。

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

“getenv”从程序启动的环境中获取PWD。 等同于当前工作目录的“PWD”是由shell维护的,而且由于在从shell启动的程序中而不是shell中更改了目录,所以PWD在环境中没有改变。

您可能还会注意到,当程序结束时,shell仍然位于您开始的目录。 shell没有改变目录,所以PWD没有改变。

PWD环境变量不会由chdir自动更新,因此您必须使用setenv明确地执行此操作。 但是, getcwd函数仍应自动报告更新的值。