CSCI 46 - System Programming with C


Introduction to the C language and system programming on a Unix-like operating system. Topics include the standard C library, memory allocation, file I/O, permissions, system calls, and process management. Development in a Unix environment will cover editors, shell scripting, makefiles, source code control, and networking.


Completion of CSCI 12 with a grade of "C" or better.
Advisory: Completion of CSCI 50 with a grade of "C" or better.

Course Outcomes

Lecture Objectives:
1. Identify the phases of compiling a C program;
2. Interpret a written program specification and decompose it into psuedocode;
3. Analyze the dependency graph for building a multi-file project. Construct a Makefile to automate the build process.

Laboratory Objectives:
Interpret written program specifications and write C programs conforming to the ANSI standard incorporating the following language and library features:
1. Standard I/O using printf, scanf, fputs, and fgets;
2. String manipulation using strcmp, arrays, and pointer arithmetic;
3. Structs and unions;
4. Multiple source and header files;
5. Stream-based and record-based file I/O;
6. Dynamic memory management;
7. Process management system calls including fork, exec, and wait, and their variants;
8. Command-line arguments;
9. Control structures: if/else, while, do/while, for;
10. Functions that accept and return primitive types, arrays, and structs;
11. Standard mathematical functions from the libm library;
12. Socket programming;
13. Recursive functions.

The student shall demonstrate proficiency developing programs in a Unix-like environment by:
1. Writing makefiles to automate the compilation process;
2. Coordinating development among two or more persons using a version control system (VCS);
3. Compiling and linking programs requiring multiple source files.


Barry Brown (classroom)


This course is offered every semester in a traditional classroom setting.