Course reader


The following online resources are recommended reading for the course. The resources aim at providing you with a starting point to help you master the implementation details required for your software development project.

There is a lot of additional material available online that you may consult, but this is not required. The below resources, your background information from other courses, and the lecture material are more than enough to successfully complete the project.

The below resources are for reference only. You cannot read everything; it is clearly too much material. You have to focus on the essential, use skill and experience to tackle the specific implementation problem at hand, and selectively read up on uncler and missing material to move forward. Conquer the project by dividing the required project tasks among your team members.

Recommended reading material

  • The Art of Unix Programming. By Eric Steven Raymond. Available online at . (Lectures will draw from selected chapters and sections. The book is written with a very high-level of abstraction and covers a lot of interesting topics. You may enjoy reading more of it than we can cover in the lectures.)
  • From C++ to C, selected online resources

Online resources for assignments (optional)

Milestone 1 helpful online resources

Character and string handling functions

To help you with the parsing tasks in the first assignment, you may want to review the character and string handling facilities in C. Below is a list of potentially useful functions in the only C book.

  • 9.3. Character handling. Available online at
  • 9.11.2. Input: the scanf family. Available online at
  • 9.12. Character I/O. Available online at
  • 9.15.1. String conversion functions. Available online at
  • 9.16. String handling. Available online at


We use Makefiles to simplify building and running the code and tests.

Coding standards and conventions

While we will not ask you to follow any specific set of coding standards and conventions, you may find it helpful to adopt a set of popular guidelines to help you work as a team. At the very least you may decide among a set of your own guidelines in your team.

File I/O handing is required in Assignment 1 and you may find the below resources helpful.

Milestone 2 helpful online resources


We will use Subversion (svn) as code version control system for this course.

Socket programming

Either one of the following:

Code documentation

We use the Doxygen code documentation tool.

You may use ACC (the AspeCt-oriented C compiler) to implement the performance profiling code for this assignment (for bonus marks)

You may use the awk or sed text processing tools to help convert the raw Census data.

Milestone 3 helpful online resources

We will use the Check unit testing framework for C.

We suggest that you use Lex and YACC for parsing starting with Assignment 3. We will use the Lex implementation called flex and the GNU Bison implementation of YACC.

The top-level tool sites for flex and bison are:

Milestone 4 helpful online resources

One approach is to handle each connection in a separate thread. You can use the POSIX Threads (pthreads) API to manage threads:

Another approach to supporting multiple clients is to multiplex connections using select():

A third approach is to spawn a new process to handle each connection. You will need to use use the fork() system call to create processes and communicate among processes:

When creating multiple threads or proceses, you may find it necessary to concurrently access a file. You should understand the issues involved with opening, reading and writing to shared files:

Other optional and helpful material