MCS-378 Lab 4: Programming a Shell

Due November 29, 2007

In this lab, your team will start with the microshell.cpp program from Figure 7.6 (p. 229) and progressively move it closer to the features of a realistic shell. (Perhaps you might call your program minishell, given its relative size and complexity.) You should turn in the final working version you wind up with. If you have made some progress toward a further revision, but not gotten it working, you can turn it in as well with an explanation of what is wrong with it.

Start by doing Programming Project 7.3. In learning the relevant aspects of the C++ standard library, you may find the following sample programs useful: words.cpp, words2.cpp, and words3.cpp. The approach illustrated by these examples isn't the only viable one; C++'s standard library is rich enough that there are plenty of other approaches. If you are comfortable with some other approach, feel free to use it.

Next, do Programming Project 7.4. For simplicity, you may assume that the & character is a word on its own, that is, separated from whatever precedes it using whitespace. Also, you may initially ignore the potential for zombies.

The file-processes.cpp program from Figure 8.2 (p. 277) illustrates how the > operator within a shell redirects standard output. Add this feature into your shell; for simplicity, you can assume that the > operator is a separate whitepace-delimited word in the input. You might also restrict the position of the output redirection, limiting it to be at the end (except for a possible &).

Add input redirection similarly.

At this point, you have a basic shell and can start making improvements. A high priority for me would be putting in the code to clean up zombies. But you might also want to make the input syntax more flexible, and you might want to add additional features that you are familiar with from real shells.