Getting ready
Store copies of the following files:
Task 1 — reading and printing
Take a look at your files and figure out how to get labstuff to process course.txt. Mostly, you have to fill in some silly strings.
This does involve a serious look at
fscanf()
.
Be sure to pay attention to that
struct courseInfo
definition.
Task 2 — sorting with void *
Take a look at the
qsort()
routine. Then look at the
Microsoft
example (and any other examples you can find).
Add the following incomplete routine.
int cmpLimit(const void *a, const void *b) { struct courseInfo *c1 = (struct courseInfo *)a ; struct courseInfo *c2 = (struct courseInfo *)b ; return your magic ; }
Now add a line to call qsort
to sort the array by
course limit size.
Be sure to print the array after sorting.
Task 3 — a better sort
Improve cmpLimit
so that it breaks ties with
department name, course number, and finally section number.
Task 4 — Raw bits
Modify your program so that it writes binary output.
You will need to add some code to use argv[2]
as the
name of an output file. Be sure to check the return code of
your new fopen
call which should look like this.
FILE *outFile = fopen(argc[2], "w") ;
Calling fwrite
to
populate your binary file.
It’s actually easier than using fprintf
.
Look at your binary file using your favorite editor or
just more it.
Binary files are not made for human reading.
Better yet, use the od.
Read Linux OD command Examples page. (Hint: -c
and
-x
.)
Task 5 — Direct I/O for binary
Finally, we are going to write a program that reads a record from the binary file. This program will be called, from the shell, as follows:
labstuff binaryFileName recordNumber
This program isn’t that long. However, it needs to call the following routines to read the record.