Computer Science 381
Programming Unix in C

Winter Immersion 2016, The College of Saint Rose



Dr. James D. Teresco, Albertus Hall 400-6, (518) 485-3755
Electronic mail: terescoj AT (best contact method)
Twitter: @JTeresco_StR_CS
Class URL: [Link]
Office hours: by email and by appointment


Everything on this syllabus is subject to change. Changes will be announced in class and updated in the online version of the syllabus.

Course Objectives

This course is an introduction to C programming using the Unix operating system. The course is designed for individuals who understand programming constructs and concepts in another programming language. No prior Unix experience is necessary. Students will develop a proficiency with Unix and the C programming language that will be helpful for upper-level courses, particularly CSC 432, Operating Systems. Topics to be covered include basic C syntax and program structure, separate compilation, functions, structures, pointers, and memory management. Unix tools including the Emacs editor, the Make utility, the GNU C compiler, and the GNU debugger will be used.



The required text for the course is The C Programming Language, 2nd Edition (Prentice-Hall, 1988, ISBN 0-13-110362-8) by Brian W. Kernighan and Dennis M. Ritchie. This is available from the Saint Rose Bookstore (and elsewhere). If you buy elsewhere, be sure to get the correct edition. It's a handy book for any computer scientist to own, so think of it as an investment.


This course is organized as a series of self-scheduled lab exercises that are to be completed in sequence during the course of the Winter Immersion period. These labs as well as supplemental readings are listed on the lab and reading schedule. There, you will find a link to a web page for each lab highlighting the lab's topics, listing class examples, and the new assignment along with the latest recommended dates of completion.

Your submissions for lab assignments will include several types of items. Different requirements apply to each, as described below. It is important that you adhere to file format and naming requirements to facilitate grading. Submissions that do not meet these requirements will not be accepted.

Lab Questions
The answers to all "lab questions" for a particular lab should be included within a single plain-text file named labn.txt, where n is the lab number. The file should start with your name and the lab number, followed by line-wrapped text responses to each lab question in the assignment. Your file should be appropriately line-wrapped for easy reading in a window or on a printed page with a width of 80 characters.

Note: for lab questions that ask you to draw a memory diagram, you have a few options. You may attempt to represent the memory with plain text, but that is difficult to construct and read. Ideally, you would use a drawing program and submit a PDF file, but you are also permitted to draw the diagram on paper and submit a scan or photograph, as long as the diagram is legible in that form.

Output Captures
You will sometimes be asked to capture the output of an existing Unix command or one of your programs in a file for submission. The file name to use for each such task will be specified in the question.
Practice Programs
Your submissions for practice programs are graded primarily on correctness, but you will be required to include your name at the top of the program, and you must use the file name specified.
Programming Assignments
These are the most formal submissions and will be graded on design, documentation, style, correctness, and efficiency (where appropriate). A good design will use an appropriate algorithm, data structures, and language constructs to solve the problem. A well-documented program will include a comment at the top of each file that includes your name, the assignment, and a description of the contents of the file. There should also be comments for each structure definition, each function definition (including a brief description of the function's purpose, its parameters, and return value), each variable or group of related variables, and any section of code whose purpose and/or behavior is not obvious from context or the code itself. Style requirements include appropriate formatting (sufficient and consistent indentation, spacing, and punctuation, wrapping long lines of code), good use of constants, and meaningful and appropriate names for variables, functions, constants, and parameters. Correctness, of course, requires the expected output be produced for a set of test inputs (which will normally not be provided in advance). Efficiency will be more important in some assignments than others, and requires that the program does not do any unnecessary computation or use any more memory than needed. This includes returning memory to the system when using dynamic memory management. And, of course, you must use the file name specified.

You are strongly encouraged to develop your C programs using a genuine Unix environment (the Saint Rose Macintosh and Computer Science Linux systems or your own Macintosh or Unix/Linux system). If you choose to develop your programs anywhere other than the Saint Rose Macintosh and Computer Science Linux systems, it is your responsibility to ensure that your program works on the grading platform. Of course, tasks where you are asked to use Unix tools will need to be completed in a Unix environment.

As there is no fixed schedule, there are no late penalties, but all work must be submitted before our final exam meeting. The recommended dates for completion of each lab lead to a very intense schedule, running to the Friday before the spring semester. It is recommended that you stay well ahead of that schedule. Note that as a 2-credit course, the expectation is for a minimum of 90 hours of effort to complete the work for the semester (including readings, labs, and exams). Some may be able to finish in a shorter total time, but as with any task that involves programming, the time needed could be significantly longer in some cases.

All assignments are to be submitted electronically unless otherwise specified. Keep a copy of all submissions for yourself.


There will be just one exam: a final, tentatively scheduled for the first day of the Spring semester. Details will be made available as the exam gets closer.


Grades for individual assignments and exams are not scaled. Any scaling deemed appropriate will take place at the end of the semester by adjusting the thresholds. The following thresholds may be adjusted downward (thereby raising grades) but will never be adjusted upward.


Labs 50% A >= 93% A- >= 90%
Exam 50% B+ >= 87% B >= 83% B- >= 80%
C+ >= 77% C >= 70%
D >= 65%
F < 65%

College policy forbids changing of course grades after they are submitted except in very specific cases (such as an error in grading of an assignment or in computation of a grade). Any such errors that slip through must be found and rectified quickly after grades are submitted. In rare circumstances, a student request for an incomplete grade may be approved at the discretion of the instructor. Requests must be made one week prior to the end of the semester, and terms of such arrangements must be mutually agreed upon before grades are submitted.

Disability Accommodations

If you are a student with a documented disability and require academic accommodations please register with Lynn Cantwell, the Director of Services for Students with Disabilities, located in the Academic Support Center on the 2nd floor of St. Joseph Hall (campus extension 2335 or 518-337-2335, off campus) for disability verification and for determination of recommended reasonable academic accommodations. After you have made arrangements with that office, please see me to discuss your accommodations. Please remember that timely notice will help avoid a delay in your receipt of accommodations.

Academic Integrity

You are encouraged to discuss the concepts related to course assignments and exams with your classmates. This is an essential part of a healthy academic environment. However, work submitted for grading must be your own (or the combined work of group members, for group assignments). Any unauthorized copying or collaboration is considered a breach of academic integrity and will not be tolerated. Plagiarism, cheating, academic misconduct, or any other submission of another's work as one's own are unacceptable. Students working in groups are each individually responsible for the academic integrity of the entire group project. Academic dishonesty cases are unpleasant and uncomfortable for everyone involved. You are responsible for reading and understanding The College of Saint Rose Policy on Plagiarism and Academic Integrity.

The minimum penalties for a first violation will include failure (0 grade) for the assignment or exam in question and the filing of a Academic Dishonesty Report Form with the Registrar's office. A second violation will result in failure of the course and a second Academic Dishonesty Report Form.

If there is any doubt about the degree of collaboration allowed or the permitted sources for a particular assignment, please ask for clarification before collaborating or consulting the source. Any such collaborations or sources must be cited properly.

The relationship among an academic institution and its faculty and its students is central to the entire concept of modern higher education. Each party has responsibilities that must be met in order for the degrees conferred to have meaning to the outside world.

The Institution

The Faculty

The Students

Note especially the dual role of the faculty as defenders of the integrity of the degrees our institutions confer and as primary facilitators to the students to be able to earn those degrees. Too often students view faculty and the courses they teach as obstacles between the student and the degree. While faculty do have a responsibility to make sure only students who have shown through their own honest work earn the degree, it is the faculty's goal to help ensure that every student (who is willing to put in the effort along the way) has the chance to earn that degree. But without the faculty defending the integrity of the college degree by making sure only students who have demonstrated compentency in their chosen program of study, that degree would soon be rendered meaningless.