Linux コマンド プロンプトを使用していますが、コマンド プロンプトでコマンド 'cd' を使用する場合と、C プログラムでシステム コールの引数としてコマンドを使用する場合の違いに気付きました。
コマンドプロンプトを使うと$home環境変数のディレクトリにディレクトリが変わるのですが、システムコールで呼び出すとディレクトリが変わらないのですか?
なぜこうなった?
コマンドはシェルビルトインです。cd
シェルスクリプトまたはコマンドプロンプトで実行されると、そのシェルによって直接解釈され、シェルプロセスの作業ディレクトリが変更されます。
cd
呼び出し内からコマンドを実行するsystem()
と、コマンドはシェルサブプロセスに渡され、そのプロセスの作業ディレクトリが変更され、すぐに終了します。親プロセスの作業ディレクトリは変更されません。
現在のプロセスの作業ディレクトリを変更する必要がある場合は、chdir()
直接呼び出してください。他のプロセスの作業ディレクトリを変更することはできないことに注意してください(子プロセスはその親から独立しています)。