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())
- Other file I/O interfaces (*)
 
- 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_SIGINFOsignal 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 SIGCHLDsignal
- 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