Unix Systems Programming CSPP5108

Course Description

    This course focuses on the principles and techniques of Unix Systems Programming. We start assuming familiarity with programming in C and expand that knowledge with the skills necessary for Unix Operating Systems Programming, including file system programming, shell programming, process management, signal management, parallel programming, interprocess communication and network programming.


    Familiarity with the LINUX/UNIX operating system and knowledge of a C like programming language, preferably C, or consent of instructor.

Learning objectives

    Upon completion of this course the student will::

    A. Understand advanced UNIX operating system concepts and terminology.

    B. Develop a command of the Unix Shell environment, including advanced Unix commands and utilities.

    C. Learn basic AWK programming.

    D. Become acquainted with the basic tools used to develop software in C on the Unix platform.

    E. Become familiar with basic IPC issues and techniques in Unix programming

    F.  Become familiar with socket programming using the Berkeley socket API

    G.  Become familiar with both the theory and practice of making Remote Procedure Calls in Unix

    H.  Become familiar with multithreaded programming in C using POSIX pThreads on Unix

    The first half of the course will consist of weekly homeworks with written questions and lab assignments. In the second half of the course, the weekly homeworks will shift to longer term projects. In addition to the programming component above, the homeworks will also encourage the student to become a sophisticated UNIX user who takes advantages of the shell and utility commands to complete work efficiently and with the least typing!


    Classes: Tuesdays, Ryerson 277 5:30-8:20

    Optional Labs: Saturdays, Ryerson 277 1:30-5:00

Required Texts

    1.  Understanding Unix/Linux Programming, by Bruce Molay, Prentice Hall, ISBN 0130083968
    2.  Advanced Programming in the UNIX(R) Environment by Richard Stevens, Addison-Wesley, ISBN 0201563177

Recommended Texts

    3.  Beginning Linux Programming, 2nd Ed., by Matthew & Stones, Wrox Press, ISBN:  1861002971 (2 copies on Ready Reserve in Eckhart)
    4.  UNIX Network Programming, Volume 1: Networking APIs - Sockets and XTI (2nd Edition) by Richard Stevens, Prentice Hall, ISBN: 013490012X (2 copies on Ready Reserve in Eckhart)
    5.  Programming with POSIX Threads by Butenhof, Addison-Wesley, ISBN:  0201633922 (2 copies on Ready Reserve inEckhart)

Reference Texts

    The C Programming Language by Kernighan and Ritchie (a.k.a, the famous "K&R" book).
    The UNIX Programming Environment by Kernighan and Pike.
    Advanced UNIX Programming by Marc Rochkind.
    The Practice of Programming by Kernighan and Pike.
    Effective awk Programming, 3rd ed. by Arnold Robbins, available online at: http://www.gnu.org/software/gawk/manual/gawk.html


    There will be weekly homeworks, which will sometimes consist of reading and written questions and sometimes consist of laboratory/programming problems. Homework will generally be assigned on Tuesday and due the following Tuesday. Homework which is not turned in by the beginning of class only qualifies for half credit. Non-programming/labratory homework turned in after solutions are published receives no credit.

    The last several programming assignments will Extra credit will be available for additional features beyond those in the assignment.

    Homework is due at the beginning of the class in paper form. In some cases, a link to online binary and source code will also be requested. There should be a makefile and all elements necessary to compile and link the program should also be present.


Instructor: Kenneth Harris, kaharris@cs.uchicago.edu

    Office: 251 Ryerson

    Office Hours: MWF, 4:30-5:30


    Homework 60%, midterm 15%, Final 20%, class participation 5%

    Books or electronic resources are not permitted to be used during the Midterm and Final exams, but up to 4 pages of notes may be used.

Programming Assignments

    The programming assignments in this class will start fairly simply but will be cumulative until by the end of the class you will have constructed substantial systems.

    The class mailing list is cspp51081@cs.uchicago.edu. Feel free to post questions to the list. Answering other students questions on the mailing list counts as class participation. The archives often contain useful information.