system ("cd ..");
これはエラーを生成しませんが、意味のあることも何もしません。なんで?
system
渡したコマンドを別のプロセス (サブシェル) で実行します。そのサブシェルはディレクトリを変更し、すぐに終了します。
それはすべて完全に有効ですが、まったく役に立ちません。chdir
作業ディレクトリを変更するために使用します。
このsystem()
関数はfork()
、最初のプロセスのコピーであるプロセスを作成する を作成します。
現在のディレクトリは、プロセスの環境に依存します (プロセスの環境変数内に格納されます)。したがって、独自の環境を持つ子プロセスが を作成すると、親プロセスではなく子cd
プロセスのみに影響します。
親プロセス: /home/x/y 内
子プロセス (フォーク後): /home/x/y 内
子プロセスでacd ..
を実行すると、そのローカル環境が /home/x に設定され
ますが、親プロセスはまだ /home/x/y にあります
親プロセスは、子が呼び出しを完了するのを待ってから、独自の環境 (現在のディレクトリ) を変更せずsystem
に独自の実行を続けます。
これは、別のシェルを実行するためです。このシェル内では、作業ディレクトリが変更されますが、呼び出し元のプログラムには影響しません。