ATTENTION: up to 5 bonus marks will be available, reflecting the
extent to which your shell can combine the above elements in an arbitrary
fashion. It is possible to get more than 30/30 on this assignment.
On the simpler side would be multiple stage pipelines:
prog1 -> prog2 -> prog3 -> prog4
- stdout of prog1 is the stdin of prog2, the stdout of prog2 is the stdin of
prog3 and the stdout of prog3 is the stdin of prog4; stdout from prog4
would simply appear in the shell normally. A more complex example
combining multiple elements:
[2] prog1 -> prog2 -> prog3 ^ infile.txt $ outfile.txt !
- stdout of prog1 is stdin of prog2, stdout of prog2 is stdin of prog3, prog1
takes its stdin from infile.txt and stdout of prog3 ends up in outfile.txt;
the entire command is run in the background and is treated (as a whole)
as part of job group 2.
Obviously it would be prohibitive in terms of time to completely support
arbitrary command variations (even the second example above requires some
design thought - what support will you need in your shell in order to treat
the entire command as a job group?); ensure you highlight what you've
attempted to do in your documentation so we can properly evaluate what you've
actually done. For example, how would you meaningfully apply the load
constraint to a multi-process command-line?
These are all design issues
and need to be highlighted in documentation (or at least the README) so we
can evaluate what you've done. If you leave it to us to discover what you
may or may not have done, there is no possibility for bonus marks as we will
not exhaustively test all assignments just in case.
Note that the idea to this bonus is not to reward people doing all kinds of
extra work, but rather to encourage you to think about how you would do these
things from the outset to make it easier. If you hack out something crude
that works for the simple cases, it may be overly difficult or daunting to
graft on some of these ideas as an afterthought. There, you've been warned.
Make your choices.