Prerequisites
Cmp Sc 2250
Textbooks
Paul S. Wang. Mastering Linux. CRC Press. 2011.
Yung-Hsiang Lu. Intermediate C Programming. CRC Press. 2015.
Arnold Robbins. Unix in a Nutshell (4th ed.). O'Reilly. 2005.
Additional material from various web sites to be posted.

Course Description

This course covers systems programming, scripting, libraries, utilities, and development tools. Additional programming topics include piping, binary files, exception handling, command-line arguments, and symbolic debugging. This course also explores tools available in the Unix/Linux environments.

Goals of the course

Topics

This course is about advanced program development techniques in Unix/Linux. You are expected to be familiar with basic Unix usage, such as editing a C program, and compiling and executing the same using the gcc compiler. This course will cover more intricate aspects of Unix, including development tools and environment, as described below:

Outcomes

At the end of this course, you are expected to program proficiently in C under Unix/Linux environment. You should be able to use various programming tools in Unix/Linux for compilation, execution, debugging, and code maintenance. Additionally, you should be able to understand some basic system programming.

Email Requirements

All correspondence should be made through your UMSL-provided mail.

Attendance

I'll expect you to be present in most of the classes. I will not be taking attendance but if you start missing too many classes, please take responsibility for your absence, specially when it concerns tests and homeworks. When you come to class, you must change your cell phone to silent mode. If you are more than ten minutes late, please try to not disrupt the class. I'll penalize you by one letter grade for habitually coming late to class (more than five times I notice you coming late).

Projects

You will be given programming assignments, typically a set of programs every two weeks. Assignments will be due at 11:59pm on the day noted on the assignment. Assignments should be submitted on delmar and must execute properly on delmar for credit. You should start working on the project as soon as it gets assigned as some of them may get tricky. If you do not know how to work on a project, see me as soon as possible for help.

Grading

The grade will be based on programming and homework assignments and three tests. All tests will be open book and open notes but no electronic devices will be permitted. Each assignment must be meticulously documented and clearly identify its purpose, author, and date. I'll like to read your submitted code; I should not have to figure it out. If you miss any test or assignment without making prior arrangements, you will have a zero. I will not give any make up test. The distribution of grades will be as follows:

Programming Assignments 40%
Three tests 20% each

Anyone desiring an EXC grade after March 31, 2018 must be passing the course at that point to get EXC.

Failure to hand in any assignment will result in an automatic zero for that assignment. If some student is unable to hand in an assignment by the deadline, he/she must discuss it with me before the deadline. I'll encourage you to talk to other students regarding homework but you should not collaborate to the extent that two submissions are copies of each other. If you are found copying an assignment (from another student or internet), or if your submission has unreasonable similarity to another submission, you get a zero for that assignment automatically. A second offense will be reported to the University officials and students involved will face serious consequences. I may ask you to come to my office and explain your code to me; in case you are not able to explain the code to my satisfaction, I'll assign you a zero in that project.

The projects in this class will take up a lot of your time. So, you should start working on those as soon as they are assigned. In the past, the students who have asked a lot of questions have scored better grades. Do not hesitate to ask a question in class, in my office, or over email, especially if you do not have an idea on how to start working on the project.

Miscellaneous

If you have any disability that requires an accommodation (as per UMSL policy), you must notify me in advance. If you cannot attend the class due to a religious holiday or a university-sanctioned event, please let me know in advance as well. In case you are down with the flu, please stay absent from the class till you recover, and contact me via phone or email. I'll try my best to make accommodation for you in that case.

You have an account on one of the Linux machines on campus (delmar) and you should use it for all assignments. Any assignment that fails to run on delmar automatically gets a zero. You may want to print the lecture notes before you come to class.

Any unsigned email and email not in plain text will go unanswered by me. Please do not send me any attachments without talking to me first.

Exam Dates

Test 1 February 14, 2018
Test 2 March 21, 2018
Test 3 (Final) May 09, 2016; 07:45am
Test 3 (Final) will be comprehensive. Other tests are not comprehensive.

List of Unix/Linux commands expected to be known

Logging in login, ssh, logout, ^d
Files vi editor, path names, ls (with options), pwd, mkdir, rmdir, cd, mv, rm, cp, file metacharacters, cat, more, head, tail, chmod, chown, chgrp, spell, wc
Process handling ^c, ^z, fg, ps, kill
Environment Acquaintance with .cshrc and .login files, modifying cd path, aliases, history and use of !, env, stty, clear, date, cal
Others Redirecting and piping (basic), man, grep, script, prof

UMSL Course Policies

Participation (expectations)

Academic Integrity/Plagiarism

Mandatory Reporting

Access, Disability and Communication

Student Support and Services

Technical Support

Academic Support

Student Services

Departmental Tutoring

Tentative Calendar

This is a rough outline; there will be two lectures allocated to tests and I have two extra lectures to make sure that we can cover the material.
Week 1
  • Introduction; Different Unix shells; Shell metacharacters
  • Basic Unix philosophy and review of some commands to illustrate command line structure
  • Hand over a list of commands assumed to be known; if the students do not know these commands, they should be able to look them over using man pages
  • Organization of man pages; searching for help using man
Week 2
  • Introduction to shells; command line
  • Variables; Environment variables. Shell built-in variables; I/O redirection, File streams
  • Programming assignment to write code by consulting the man pages
Week 3
  • bash shell
  • Difference between child shell and subshell
  • Creating shellscripts
  • Control statements
Week 4
\item Handling interrupts; Command line options; Filename generations \item Receiving the output value; successful or unsuccessful termination \ei \item [Week 5] \bi \item Regular expressions (with sed and awk) \item Test 1 \ei \item [Week 6] \bi \item Functions and arrays in \verb#bash# shell \item Revision control system \item Make utility \ei \item [Week 7] \bi \item Make utility \item Library creation (static and dynamic linking) \item Gnu debugger \ei \item [Week 8] \bi \item Debugger \item Code profiling \ei \item [Week 9] \bi \item C Programming: Bit operators \item C Programming: \textsc{i/o} and string handling \ei \item [Week 10] \bi \item C Programming: Files, including binary files and random access \item C Programming: multiple file compilation, header files, prototyping \ei \item [Week 11] \bi \item C Programming: Macros, preprocessor \item Temporary files \ei \item [Week 12] \bi \item Dynamic memory allocation/deallocation/use \item System Programming: System calls, fork/exec/wait/waitpid \ei \item [Week 13] \bi \item System Programming: Signal handling \ei \item [Week 14] \bi \item System Programming: Shared memory \ei \ei \end{document} \end{document}


Some sites of interest to the class


At the end of semester party; 12/14/2007