0

質問があります。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);
    }
}

私の Linux システムでは、元のパスは/home/Tom3543であり、上記のコードを を使用してコンパイルすると、問題gcc -o testchdir testchdir.cないように見えます。後で、パスを変更してプログラムを実行したいので、

./testchdir /home/tom3543/C++

「success in chdir」が端末に表示されましたが、端末のパスはまだ /home/Tom3543 です。誰かが理由を説明するのを手伝ってくれますか? 私はそれについて混乱しています!

4

1 に答える 1

9

これは、シェルがプログラムの新しいプロセスを開始し、その新しいプロセスの現在のディレクトリのみを変更するためです。シェル プロセスは影響を受けません。

残念ながら (あなたにとって) 親プロセス (シェルのプロセス) の作業ディレクトリを変更するための本当に良い (または合法的な) 方法はありません。

于 2015-09-10T14:05:59.993 に答える