Linux/UNIX System Programming Fundamentals course outline
- Course Introduction
- Fundamental Concepts
- System calls and library functions
- Error handling
- System data types
- Notes on code examples
- File I/O
- File I/O overview
- open(), read(), write(), and close()
- File I/O Buffering
- Kernel buffering
- User-space (stdio) buffering
- Controlling kernel buffering
- File I/O: Further Details
- The file offset and lseek()
- Atomicity
- Relationship between file descriptors and open files
- Duplicating file descriptors
- File status flags (and fcntl())
- Files
- Inodes
- Retrieving file information: stat()
- File mode
- Changing file attributes
- Directories and Links (*)
- Directories and (hard) links
- Symbolic links
- Hard links: system calls and library functions
- Symbolic links: system calls and library functions
- Current working directory
- Operating relative to a directory (openat() etc.)
- Scanning directories
- Processes
- Process IDs
- Process memory layout
- Command-line arguments
- The environment list
- Process credentials
- Process groups and sessions (*)
- Nonlocal gotos
- Signals
- Overview of signals
- Signal dispositions
- Useful signal-related functions
- Signal handlers
- Signal sets, the signal mask, and pending signals
- Designing signal handlers
- Signals: Signal Handlers
- Async-signal-safe functions
- Interrupted system calls
SA_SIGINFO
signal handlers
- The signal trampoline (*)
- Process Creation and Termination
- Creating a new process: fork()
- File descriptors and fork()
- Process termination
- Monitoring child processes
- Orphans and zombies
- The
SIGCHLD
signal
- PID file descriptors
- Executing Programs
- Executing programs: execve()
- The exec() library functions
- File descriptors and exec()
- Process attributes during fork() and exec()
- System Call Tracing with strace (*)
- Getting started
- Tracing child processes
- Filtering strace output
(*) Topics marked with an asterisk will be covered subject to time
constraints.
Return to the course overview