Thinking in C and *nix (CSC 295/282 2014S) : Handouts


This is an approximate schedule. Expect dates and topics to change. (I will try to keep due dates the same.)

Some of the information here can also be found in the Google calendar for the course, which is available at <>.

Date Topic Reading Lab Work Due
01 Thursday, 23 January 2014 Introduction About the course. Some principles and practices. Example: C from K and R. Detour: A C memory problem. Exercises: Some simple tasks. Some important *nix tools. Looking ahead. HW 00: Set up a GitHub account and Learn a bit of git
02 Thursday, 30 January 2014 Some Basic Tasks and Corresponding Tools Fun with GitHub. Go over homework. Exercise: The spaces problem. Raymond, chapter 1. Thinking about basic tools. HW 01: Solve some simple tasks
03 Thursday, 6 February 2014 The Bash Shell - A Refresher Some things you should know. Files and directories. Command-line patterns. File and directory permissions. I/O redirection. Variables. Command-line history. The script command. HW 02
04 Thursday, 13 February 2014 Decoding Scripts Background. Analysis. Algorithm. Inputs. Implementation. HW 03
05 Thursday, 20 February 2014 Compilation, Macros, and the C Preprocessor A C program ecosystem. Steps in compilation. Including files. Detour: Why we have included files. Macros. CPP cnditionals. Detour: Standard header file format. Command-line flags. Hack: Generic data types. HW 04
06 Thursday, 27 February 2014 Using Macros for Logging Interesting macro examples. Requirements for a debugging/logging system. Implementation details. HW 05
07 Thursday, 6 March 2014 Learning Vi (Optional) HW 06
08 Thursday, 13 March 2014 Vi, Continued HW 07: Playing with vi settings
Spring Break
09 Thursday, 3 April 2014 Automating Work with Make Project ecosystems. An introduction to Make. Example: A standard C project. Good Make practice: Standard targets Example, continued: Adding more targets to our project. Using variables. Example, continued: Improving our Makefile with variables.
10 Thursday, 10 April 2014 Improved Make A quick review of Make. Automatic variables. Generic rules. Standard make rules. Another example: Document development. Other useful techniques. Miscellaneous tools and techniques. HW 08
11 Thursday, 17 April 2014 Debugging with GDB Debuggers. gdb, the GNU Debugger. Tracing crashes. Some other operations. Another example. HW 09
12 Thursday, 24 April 2014 Miscellaneous C Programming Issues Testing with assert. (Already covered this year.) Memory issues in C programs. Checking memory problems with valgrind. Sorting, revisited. Function pointers. HW 10
13 Thursday, 1 May 2014 Variadic Functions Writing C functions that take variable numbers of parameters. C's "varargs" facility. Some examples. Design issues. Variadic macros. Behind the scenes. HW 11
14 Thursday, 8 May 2014 Wrapup What we've learned. Topics for future exploration. Course evaluation. Debriefing. HW 12

Copyright (c) 2013-14 Samuel A. Rebelsky.

Creative Commons License

This work is licensed under a Creative Commons Attribution 3.0 Unported License. To view a copy of this license, visit or send a letter to Creative Commons, 543 Howard Street, 5th Floor, San Francisco, California, 94105, USA.