跳转到内容

5. 练习:实现简单的 Shell

用讲过的各种 C 函数实现一个简单的交互式 Shell,要求:

  1. 给出提示符,让用户输入一行命令,识别程序名和参数并调用适当的 exec 函数执行程序,待执行完成后再次给出提示符。

  2. 识别和处理以下符号:

    • 简单的标准输入输出重定向(<和>):仿照 例 30.5“wrapper”,先 dup2 然后 exec

    • 管道(|):Shell 进程先调用 pipe 创建一对管道描述符,然后 fork 出两个子进程,一个子进程关闭读端,调用 dup2 把写端赋给标准输出,另一个子进程关闭写端,调用 dup2 把读端赋给标准输入,两个子进程分别调用 exec 执行程序,而 Shell 进程把管道的两端都关闭,调用 wait 等待两个子进程终止。

你的程序应该可以处理以下命令:

plaintext
○ls△-l△-R○>○file1○
○cat○<○file1○|○wc△-c○>○file1○
○表示零个或多个空格,△表示一个或多个空格