クラスの割り当てのために、独自の基本的なシェルを作成しています。他の関数の中でも特に、絶対パスを処理し、fork() と execv を使用して外部アプリケーションを実行できる必要があります。
アイデアは、プログラムが子プロセスをフォークし、その子プロセスを置き換える execv を呼び出し、外部実行が完了すると終了するというものです。
残念ながら、私はこれに関するクラスに参加できませんでした。オンラインで見つけたいくつかの例を試しましたが、どれも機能しませんでした。問題は、親プロセスが execv コマンドを複製し、それ自体を終了させることです。現在、「/bin/ls」を実行してシェルのメインループに戻ろうとしています。
これが問題のコードです。シンプルなものが欠けていると思います。はい、これは教授にとって良い質問ですが、彼は金曜日のオフィスアワーを守っていないので、メールの返信を何時間も何日も待ちたくありません。:P 同様に、より良いエラーチェックを実装する必要があることもわかっています。今は基本的な機能に取り組んでいます。あとで機能を追加します。
以下のすべての変数が適切な値を持っていることを確認しました。問題は、execv の後にのみ子プロセスを閉じ、親が同じことをしないようにするにはどうすればよいかということです。
TLDR: fork/execv の使い方を独学で学んでいて、自分がまったく無知であることがわかりました。
161 pid_t child = fork();
162
163 if(child != -1)
164 if(token[0] == '.' || token[0] == '/')
165 if(access(token, X_OK) == 0) {
166 char** charArgs = toCharMatrix(args);
167 execv(token, charArgs);
169 }