bash
and other popular shells.
Copy the hw5 template to your turn-in directory thus:
svn export svn://bits.cs.uic.edu/cs361/pub/homeworks/hw5
svn add hw5
You will also need to install the readline developer files:
sudo apt-get install libreadline-dev
ls
do the same thing as /bin/ls
, but also make sure that mydir/mybinary
still works correctly.
HINT: getenv()
to get the environment variable, then strsep()
to split it into multiple path strings. Finally, sprintf()
to compose a full path out of its components.
echo hello world
, should produce hello world
.
HINT: you could use strsep()
to split the arguments into an array, which you then pass to execve()
.
ls > /tmp/templ
should create a file (with correct permissions) containing the output of ls. Similarly wc < /tmp/templ
should use the file as input, and wc < /tmp/templ > /tmp/count
uses both input and output redirection.
HINT: use open()
to open a file, and dup2()
to change where stdin(0) or stdout(1) points to.
ls -l | sort -n -k 5 | cut -c 27-34 > /tmp/sizes
produces a file containing a sorted list of file sizes.
HINT: this is by far the most challenging part of the homework. Use fork()
as in the template code to start up multiple concurrent processes, pipe()
to create pipes through which processes communicate, and dup2()
to redirect output into and out of pipes. Finally, use waitpid()
to wait for child processes to finish.
./echo.hw5 hello world hello world helloReplace any occurrence of $1,$2,$3 etc with the first, second, third command line argument respectively. HINT: this one will require some manual string manipulation, but
strchr()
to find each "$", and strncpy()
to copy part or all of strings is a good start.
readdir()
and associated functions.
HINT: you don't need to support anything but the pure * wildcard. However, for extra pound-on-my-hairless-chest geek credit, see if you can figure out how to support things like *.txt, hw *, and *stuff*and*other*stuff. I'm pretty sure fnmatch()
will be handy.
./test.hw5 * Echo seems to work * Now the directory contents: Makefile echo.hw5 hw5 hw5.c hw5.dSYM hw5.sh~ test.hw5 * Now the number of files: 7 * Now we should see "Hello World": Hello World * And now the contents of /tmp/countfile 2 * Now a list of file sizes 25 81 102 157 630 3377 15336 * And finally "hello world hello world" hello world hello world
Copyright 2016 The Board of Trustees of the University of Illinois.webmaster@cs.uic.edu |
WISEST Helping Women Faculty Advance Funded by NSF | ![]() | ![]() |