1
system ("cd ..");

これはエラーを生成しませんが、意味のあることも何もしません。なんで?

4

3 に答える 3

6

system渡したコマンドを別のプロセス (サブシェル) で実行します。そのサブシェルはディレクトリを変更し、すぐに終了します。

それはすべて完全に有効ですが、まったく役に立ちません。chdir作業ディレクトリを変更するために使用します。

于 2013-01-10T11:51:50.873 に答える
6

このsystem()関数はfork()、最初のプロセスのコピーであるプロセスを作成する を作成します。

現在のディレクトリは、プロセスの環境に依存します (プロセスの環境変数内に格納されます)。したがって、独自の環境を持つ子プロセスが を作成すると、親プロセスではなく子cdプロセスのみに影響します。

  • 親プロセス: /home/x/y 内

  • 子プロセス (フォーク後): /home/x/y 内

子プロセスでacd ..を実行すると、そのローカル環境が /home/x に設定され
ますが、親プロセスはまだ /home/x/y にあります

親プロセスは、子が呼び出しを完了するのを待ってから、独自の環境 (現在のディレクトリ) を変更せずsystemに独自の実行を続けます。

于 2013-01-10T11:52:09.897 に答える
0

これは、別のシェルを実行するためです。このシェル内では、作業ディレクトリが変更されますが、呼び出し元のプログラムには影響しません。

于 2013-01-10T11:52:14.837 に答える