CS 241: Systems Programming

Semester: Fall 2011
Room: King 221
Class Time: Mon/Wed/Fri 1:30pm-2:20pm
Office Hours: Tuesday, 3:00-4:30pm
Wednesday, 2:30-4:00pm
or by appointment
Professor: Benjamin Kuperman
email: benjamin.kuperman AT oberlin edu
Please include "cs241" in the subject.
AIM: ProfKuperman
Office: King 223B
Phone: x58556



(Will be updated throughout the semester)
1 Sep 05 Labor Day
Sep 07   Introduction and course overview HW 0
Sep 09 Chapter 1 - Quick intro to C
2 Sep 12   Chapter 2 - Types and operators HW 1
Sep 14 Last Day to Add/Drop (Sep 15)
Sep 16  
3 Sep 19   Chapter 3 - Control flow HW 2
Sep 21 GDB and Valgrind
Sep 23 Chapter 4 - functions and scope
4 Sep 26  
Sep 28 Chapter 5 - arrays, strings, and pointers
Sep 30 HW 3
5 Oct 03  
Oct 05 Chapter 5 - command line arguments
Chapter 5 - Multi-dimensional arrays
Oct 07 HW 4
6 Oct 10   Misc stuff about the homework
Oct 12 Exam review
Oct 14 Midterm Exam #1 [topics]
7 Oct 17   Chapter 6 - structures HW 5
Oct 19
Oct 21
  Oct 24 October Break (Oct 22-30)
Oct 26
Oct 28
8 Oct 31   Chapter 7 - Input and Output HW 6
Nov 02 Midterm grades available (Nov 03)
Nov 04  
9 Nov 07 Last Day for P/NP, CR/NE,
  or Withdraw (Nov 08)
Huffman compression HW 7
Nov 09   Unix and Shell scripting
Nov 11
10 Nov 14  
Nov 16
Nov 18
11 Nov 21   HW 8
Nov 23
Nov 25 Thanksgiving Break (Nov 24-27)
12 Nov 28   Unix systems programming (i.e., system calls)
  • fork/exec
  • file descriptors and low-level I/O
  • signals
Nov 30 HW 9
Dec 02
13 Dec 05  
Dec 07 Midterm Exam #2 [topics]
Dec 09 Kuperman out-of-town
14 Dec 12   Wrap-up and other Unixy goodness
  Dec 19 Final Exam (7-9pm King 221) [topics]

Course Description

From the Oberlin catalog course description:

This course will consider the C programming language and its relationship to the Unix operating system. It will also introduce the C++ language and focus on differences between the Java and C++ applications. Some Unix system programminig issues will also be included. The course will require a significant amount of programming.

Goals and course objectives

My goals and objectives for students taking this course are as follows:

  1. Understand the role of C in the field of computing
  2. Understand the interrelationship of C and Unix
  3. Become fluent in C programming including
    • Compound data types such as structs and unions
    • Dynamically allocated structures (including cleanup)
    • Binary and bit-wise manipulations
  4. Develop the habit of thorough testing and become comfortable in using debugging tools including gdb, valgrind, etc.
  5. Become acquainted with the Unix tool philosophy and some common tools
  6. Be able to write a Unix tool
  7. Be able to compose Unix tools into shell scripts
  8. Learn how to use C++ and how it differs from Java and C


We'll be using the canonical K&R C textbook for this class.

The C Programming Language

The C Programming Language by Kernighan and Ritchie

You might also be interested in the following books as personal references:

I'll try to make a copy of these available in one of the labs for your use.

Useful Tools

There are a number of tools that may be useful to you.


Code browsing

Both of these can be incorporated into Vim or Emacs.


Grades will be calculated based on the following distribution:

The distribution might be adjusted based on the progression of the course.

Course Policy


Regular class attendance and participation is expected. Please talk to me if regular class attendance is going to be a problem.

Homework Assignments

There will be a number of assignments made in this class. I expect every student to attempt each assignment and turn in the results. You are encouraged to complete every assignment as this is one of the most effective ways to learn the material.

If you know that for some reason you will not be able to submit the assignment before the deadline, you should contact me in advance of the deadline. Extensions are only granted in exceptional circumstances, but need to be done in advance.

Late submissions of homework assignments will be penalized up to 10% per day. Extra credit will not be accepted after the initial deadline.

Accommodations for students with disabilities

If you have a disability that might impact your performance in this course, or requires special accommodation, please contact me as soon as possible so that appropriate arrangements can be made. Support is available through Student Academic Services, specifically Jane Boomer. You will need to contact them to get your disability documented before accommodations can be made.

Plagiarism and Academic Dishonesty

I have very low tolerance for academic dishonesty, and will vigorously pursue available remedies for any incidents. All work in this class is to be performed according to the Oberlin Honor Code. Specifically I expect that:

  1. Quizzes and exams will be closed book, closed notes, and no communication between students. This includes discussing the same to students who are taking the quiz at another time.
  2. Discussion of assignments is expected and encouraged, however all work and code on assignments should be your own without outside assistance.
  3. Sources should be cited including the textbook and other web sites when you use them in your work.
  4. You are not permitted to share your source code with other students, including future ones.
  5. You are not permitted to use other students solutions as your own (even those from a prior semester), nor answer keys, nor instructor versions.

Illustrative examples:

  1. Confirming that we had and exam is OK, telling another student in the class who has not taken it that it was easy/hard, what topics, etc. is NOT OK.
  2. On a project or homework, discussing what needs to be done and how it can be done is OK, having a student (other than a TA) go over your code is NOT OK, discussing what might be wrong and how to tell is OK (and encouraged).
  3. Unless otherwise specified in the assignment, you decide to use an insertion sort and copy the version from your Java textbook is OK as long as you give appropriate credit. E.g.,
        /* based on insertion sort from Weiss 3rd Ed, p. 306 */

All assignments must include the following signed statement:

"I have adhered to the Honor Code in this assignment."

Electronic submissions should include the honor statement in either the README file or header comments and must include your name.

Grader and Tutors

Contact me if you are interested in a Student Academic Services approved tutor.

The CSMC might hold walk-in tutoring sessions as well.

VI PoweredLast Modified: November 15, 2011 - Benjamin A. Kuperman

Valid HTML 4.01 Strict Valid CSS!