- evolution and current state of UNIX systems, standards (The Single UNIX Specification), fundamental tools for C language, API/ABI
- description of OS kernel services for C programmer
- representation and categorization of users/groups, access rights
- filesystem principles, VFS, input/ouput programming, file descriptor handling
- process manipulation, process states, program execution, virtual memory layout, ELF format
- work with pipes, shared memory, dynamic linker interfaces
- signals and their handling
- communication and synchronization of processes, System V IPC
- network communication, BSD sockets, conversion of names and IP addresses
- threads and their relationship to processes, thread synchronization (mutexes, rwlocks, condition variables, semaphores, barriers)
This course prepares students for developing software in the Unix/Linux environment using the C programming language. The main objectives of the class are to explain how the userland-kernel interface works and how its API is used, how to write complex command line tools and daemons for the Unix/Linux environment, and to provide skills to understand inner works of various open source projects written in C. The class includes extensive laboratory work where all the knowledge gained in the lectures is practiced.