「<」コマンドと「>」コマンドだけでリダイレクトを処理できる単純なカスタム シェルを C で作成することになっています。
open(fd, filename, flags)
これを行うために、各コマンドを (文字列の配列で) 解析し、文字 '<' と '>' をチェックしてから、読み取りまたは書き込みのためにファイル名を開きます。
これらのコマンド (% はシェルを意味します) を発行すると、次のような出力が得られるはずです。
% echo hello > output.txt
% cat output.txt
hello
ただし、これらのコマンド、および実際にはすべてのコマンドを発行すると、リダイレクトが無視されるように見えます (ただし、無視されませんか?)。同じコマンドを発行すると、次のようになります。
% echo hello > output.txt
% cat output.txt
hello > output.txt
奇妙な部分は、「output.txt」というファイルを作成し、「hello > output.txt」と書き込むことです。
これは、入力リダイレクタと出力リダイレクタの両方で発生します。以下は、出力コマンドを開いて実行するためのコードです。
int fd;
open_write_file(&fd, commands[index]);
dup2(fd, 1);
execvpe(commands[0], commands, envp);
close(fd);
open_write_file()
ファイル名をフラグ付きO_WRONLY | O_TRUNC | O_CREAT, S_RUSR | S_IRGRP | S_IWGRP | S_IWUSR
で開き、正しく開くことを確認するためにエラー チェックを行うことに注意してください。これを解決して、実際に必要なコマンドを実際に実行するにはどうすればよいですか?