Unix Utilities
In this project, you'll build a few different UNIX utilities, simple versions of commonly used commands like cat, ls, etc. We'll call each of them a slightly different name to avoid confusion; for example, instead of cat, you'll be implementing my-cat.
Objectives:
- Re-familiarize yourself with the C programming language
- Learn a little about how UNIX utilities are implemented
- Learn (as a side effect) how to use a proper code editor such as emacs
my-cat
The program my-cat is a simple program. Generally, it reads a file as specified by the user and prints its contents. A typical usage is as follows:
my-cat main.c
In this case, my-cat will read the file main.c and print out its contents.
You'll need to learn how to use a few library routines from the C standard library (often called libc) to implement the source code for this program, which we'll assume is in a file called my-cat.c. All C code is automatically linked with the C library, which is full of useful functions you can call to implement your program. Learn more about the C library here and perhaps here1.
For this project, we recommend using the following routines to do file input and output: fopen(), fgets(), and fclose(). Whenever you use a new function like this, the first thing you should do is read about it -- how else will you learn to use it properly?
On UNIX systems, the best way to read about such functions is to use what are called the man pages (short for manual). In our HTML/web-driven world, the man pages feel a bit antiquated, but they are useful and informative and generally quite easy to use.
To access the man page for fopen(), for example, just type the following at your UNIX shell prompt:
prompt> man fopen
The fopen() function opens a file
my-grep
my-zip and my-unzip
my-sort
my-uniq
Footnotes
1: Unfortunately, there is a lot to learn about the C library, but at some point, you've just got to read documentation to learn what is available. Why not now, when you are young? Or, if you are old, why not now, before it's ... ahem ... too late?