In this course, students will learn to develop complex system-level software in the C programming language while gaining an intimate understanding of the UNIX operating system (and all OS that belong to this family, such as Linux, the BSDs, and even Mac OS X) and its programming environment. Topics covered will include the user/kernel interface, fundamental concepts of UNIX, user authentication, basic and advanced I/O, fileystems, signals, process relationships, and interprocess communication. Fundamental concepts of software development and maintenance on UNIX systems will also be covered. The students are expected to have a good working knowledge of the C programming language (EPL232) and a good working knowledge of fundamental Operating System Concepts (EPL222).

Outline: Main concepts of System Programming, Introductory and Advanced UNIX commands, System utilities and stream editors (awk,sed), Advanced Shell programming with an emphasis on Bash, Low-Level I/O in C, Files and Filesystem, Processes: Environment, Control and Signals, Interprocess Communication (IPC) with an emphasis on Pipes and Named Pipes (FIFO) in C, XSI IPC (Semaphores, Shared Memory and Message Queues) in C, Network IPC (TCP Sockets) and the client/server model in C, Multithreading in C, Performance evaluation (profiling). Issues in system security and system engineering, Systems Programming in Windows (threads, processes, IPC, sockets and Powershell programming), Scripting Languages: Perl, PHP, Python, TCL/TK.

Course Website: https://www.cs.ucy.ac.cy/~dzeina/courses/epl421/