いくつか質問があります。割り当てはこちらで確認できます: http://www.cs.uic.edu/~i385/
これらの質問は、私が割り当てをよりよく理解できるようにするための質問ではなく、コーディングの回答を提供することを意味しません.
このドキュメントを数回読んだことがありますが、実装する必要があるコマンドのリストはどこにもありません。少量のシェルコマンドはありますか? もしそうなら、それらの包括的なリストはどこで見ることができますか? トンがある場合、このプログラムは、入力を取得して解析し、実際のオペレーティングシステムに渡すシェルをエミュレートすることになっていますか?? この場合、誰かがこれを達成するためにどの機能を使用するかをリンクできますか?
リンクされたページのリストには、Fork や Exec などのコマンドと man ページが記載されています。これらは、プログラムが適切に機能するように実際のコードで使用する関数ですよね?
上記の割り当てリンクには、次のようなセグメントがあります。
各子プロセスの終了時に、そのユーザー時間とシステム時間を記録します。これらは、完了した個々の子供について報告する必要があり、「統計」と入力して完全な履歴を利用できるようにする必要があります。システム コールは、
wait4
待機中の特定の子に関する必要な情報を返します。getrusage
データ構造の完全な説明については、man ページを参照してくださいrusage
。*記録することになっているこの「ユーザー」について特に興味があります。これは、マシンにログインしている個人の実際のログイン名ですか、それともシェルの開始時に使用する何らかのユーザー名ですか?
私はコーネルのサイトでこれを見つけました、シェルの疑似コード、それは次のように読みます:
.
int
main(int argc, char * * argv) {
while (1) {
int childPid;
char * cmdLine;
printPrompt();
cmdLine = readCommandLine(); //or GNU readline("");
cmd = parseCommand(cmdLine);
record command in history list(GNU readline history ? )
if (isBuiltInCommand(cmd)) {
executeBuiltInCommand(cmd);
} else {
childPid = fork();
if (childPid == 0) {
executeCommand(cmd); //calls execvp
} else {
if (isBackgroundJob(cmd)) {
record in list of background jobs
} else {
waitpid(childPid);
}
}
}
}
}
上記のロジックフローは私には理にかなっていますが、次のことについて少し迷っています。
- 組み込みコマンドとはどういう意味ですか?
- そして、それが「組み込み」でない場合、プログラムはどうすれば何をすべきかを知ることができますか?
- 最後に、バックグラウンド ジョブとは何ですか?