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.
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.
We use Makefiles to simplify building and running the code and tests.
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.
We will use Subversion (svn) as code version control system for this course.
Either one of the following:
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.
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:
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
A third approach is to spawn a new process to handle each connection. You will need to use use the
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: