CISC 220/3.0 System-Level Programming

Original Author: R. Tennent
Last Revised: October 15, 2009

Calendar Description
Basic concepts of Unix-like systems. Shells and scripting. System-level programming in the C language. Software development tools and techniques.

Pre- or Co-requisite CISC 124/3.0.
Learning Hours 120 (36L;84P)


In the past, students entered Computing programs with little or no computing experience. They were required from the very beginning to learn the Unix user interface and conventions for files, directories, permissions and processes. They acquired experience of software-development techniques and tools incrementally in subsequent courses.

But increasingly, students have been starting Computing programs with considerable experience using graphical user interfaces on Windows and Mac computers, and our introductory courses have been taking advantage of this prior experience. As a consequence of this, the students have not been acquiring a foundation of system-level concepts on which subsequent courses can build and have been graduating without any opportunity to learn the basics of Unix-like systems and widely used system-level software-development techniques and tools. The aim of this course is to provide this opportunity.

This course is required in all Computing programs except COGS.

System-level Concepts
The basic system-level concepts to be surveyed include shells, file system and directory operations (including basic tools such as chmod, grep, diff, and find), pipes, filters, processes, signals, and sockets.

Scripting is to be discussed for a shell such as bash. A scripting language such as Perl or Python might be considered briefly.

C Programming
C programming topics to be discussed include: macros, header files, unions, strings, buffer overflow, pointer arithmetic, function pointers, use of dynamic storage, variable-length argument lists.

Software Development Tools and Techniques

The software development topics (and corresponding Unix-like system tools) to be surveyed include

package management tar, gzip, bzip2
text editing vi, emacs
build management make
patching patch
debugging strace, gdb, ddd
profiling time, gprof
version management cvs, subversion

Other Topics

Integrated development environments and rapid application-development systems (Eclipse, VisualBasic, Xcode, Delphi, Anjuta, etc.) might be briefly discussed, but should not be a major focus of this course.
Possible Textbooks and References
  • K. Haviland, D. Gray, and B. Salama. Unix System Programming. Pearson Education, 2nd edition, 1998.

  • Brian Kernighan and Dennis Ritchie. The C Programming Language. Prentice Hall, 2nd edition, 1988.

  • K. N. King. C Programming: A Modern Approach. W. W. Norton, 1996.

  • Mark Lutz and David Ascher. Learning Python. Oreilly, 2nd edition, 2003.

  • Tomasz Muldner. C for Java Programmers. Addison Wesley, 2000.

  • Jerry Peek, John Strang, and Grace Todino. Learning the UNIX Operating System. Oreilly, 5th edition, 2001.

  • S. M. Sarwar and K. H. Al-Saqabi. Linux and Unix Programming Tools: A Primer for Software Developers. Pearson Education, 2003.

  • Mark Sobell. A Practical Guide to Linux Commands, Editors, and Shell Programming. Prentice Hall Professional Technical Reference, 2005.