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