Linux System Programming Fundamentals (NDC TechTown) workshop outline
- Course Introduction
- Fundamental Concepts
- System calls and library functions
- Error handling
- System data types
- Notes on code examples
- File I/O and Files
- File I/O overview
- open(), read(), write(), and close()
- The file offset and lseek()
- Relationship between file descriptors and open files
- Duplicating file descriptors
- File status flags (and fcntl())
- Retrieving file information: stat()
- Processes
- Process IDs
- Process memory layout
- Command-line arguments
- The environment list
- The
/proc
filesystem
- Signals
- Overview of signals
- Signal dispositions
- Signal handlers
- Useful signal-related functions
- 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 Lifecycle
- Introduction
- Creating a new process: fork()
- Process termination
- Monitoring child processes
- Orphans and zombies
- The
SIGCHLD
signal
- Executing programs: execve()
- System Call Tracing with strace (*)
- Getting started
- Tracing child processes
- Filtering strace output
- System call tampering
- Further strace options
- Pipes and FIFOs
- Overview
- Creating and using pipes
- Connecting filters with pipes (*)
- FIFOs (*)
- Alternative I/O Models
- Overview
- Nonblocking I/O
- Signal-driven I/O
- I/O multiplexing: poll()
- Alternative I/O Models: epoll
- Problems with poll() and select()
- The epoll API
- epoll events
- epoll: edge-triggered notification (*)
- epoll: API quirks (*)
- Event-loop programming (*)
(*) Topics marked with an asterisk will be covered subject to time
constraints.
Return to the course overview