execve を使用して ls コマンドを実行しようとしています。現在、次の引数で実行しています。
execve(args[0], args, env_args)
//args looks like {"ls", "-l", "-a", NULL}
//env_args looks like {"PATH=/bin", "USER=me", NULL}
これが行うことを期待していたのは、新しい env_args を使用して ls コマンドを実行することでした。これは、PATH で ls を検索することを意味します。ただし、このコードは実際には何も実行せず、コードを実行すると出力なしでコマンド プロンプトに戻るだけです。
同じ args[] を使用して、私は execvp を使用していましたが、ls が機能し、現在のパスを検索しました。
私が間違っていることを教えてもらえますか?
私がやろうとしているのは、独自の環境を作成してエクスポートし、char** で定義した環境を exec に使用させることができる独自のシェル プログラムを作成することです。基本的に、env_args を操作して変数を追加および削除する独自の関数を作成しています。exec を呼び出すときに、{"ls", "-l", NULL} で exec を呼び出して新しい環境を調べられるようにしたいと考えています。 ls という有効なプログラムのパス変数。これで私がやっていることが少し良くなることを願っています。この場合、 extern 環境変数が機能するとは思いません。