CISC 220/3.0 System-Level Programming
Original Author: R. Tennent
Last Revised: October 15, 2009
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
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
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 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
Possible Textbooks and References
- 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.
- 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
- 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.