B09 Lab week 11

This is an exercise in launching a child process and setting up file redirection.

We will be implementing the equivalent of “command 2> filename”.

The finished program err-redir will take 2 or more arguments: filename, program to run, command line arguments for that program. Example:

./err-redir xyz ls dne
means to run ls dne, and its stderr should go to filename xyz. (Since dne does not exist, there should be an error message in xyz.)

The provided starter file err-redir.c already has a skeleton. But there are many things to complete or fix (marked by “TODO”); please see the file for specifications.

Some sample programs are provided: sample (shell script) and check-open.c. Please take a look at what they do and how they help you test.

But here are some sample sessions:

$ ./err-redir xyz ls dne
exit: 2
$ cat xyz
ls: cannot access 'dne': No such file or directory

$ ./err-redir xyz ./sample 7
exit: 7
$ cat xyz
hi

$ ./err-redir xyz ./sample signal
signal: 15

$ ./err-redir xyz ./sample po
total 0
lrwx------ 1 trebla trebla 64 Jul  9 14:27 0 -> /dev/pts/0
lrwx------ 1 trebla trebla 64 Jul  9 14:27 1 -> /dev/pts/0
lrwx------ 1 trebla trebla 64 Jul  9 14:27 2 -> /dev/pts/0
exit: 0

$ ./err-redir xyz ./check-open
AOK
exit: 0

$ ./err-redir xyz ./err-redir.c
cannot exec: Permission denied
exit: 126

$ ./err-redir xyz asdfqwerty
cannot exec: No such file or directory
exit: 127