78 lines
2.3 KiB
Markdown
78 lines
2.3 KiB
Markdown
|
|
# 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](https://en.wikipedia.org/wiki/C_standard_library) and perhaps
|
|
[here](https://www-s.acm.illinois.edu/webmonkeys/book/c_guide/)<sup>[1](#myfootnote1)</sup>.
|
|
|
|
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
|
|
|
|
|
|
<a name="myfootnote1">1</a>: 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?
|
|
|
|
|
|
|
|
|