6

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です)

変更された/boot

ディレクトリが変更されました。現在の作業ディレクトリは「/home/user」「/boot」です。

4

3 に答える 3

7

はい、環境変数を変更する場合は、明示的に行う必要があります。

イベントの通常の実行で設定および更新するのはシェルであるPWDため、シェルが認識している現在のディレクトリの変更のみを反映します。

于 2010-09-04T11:33:41.130 に答える
3

PWD環境変数はによって自動的に更新されないchdirため、を使用して明示的に更新する必要がありますsetenv。ただし、getcwd関数は更新された値を自動的に報告する必要があります。

于 2010-09-04T11:47:10.353 に答える
3

「getenv」は、プログラムが開始された環境からPWDを取得します。現在の作業ディレクトリに等しい「PWD」はシェルによって維持されるものであり、プログラムでディレクトリを変更したため、シェルではなくシェルから開始したためPWD、環境内で変更されていません。

プログラムが終了しても、シェルはまだ開始したディレクトリにあることに気付くでしょう。シェルはディレクトリを変更していないため、PWDは変更されていません。

于 2010-09-04T11:44:05.627 に答える