1 Introduction to System Programming in C
1.1 Understanding System Programming
1.2 C Language Features for System Programming
1.3 Using Libraries and Header Files
1.4 Compiling and Linking C Programs
1.5 POSIX Standards and Compliance
1.6 Basics of System Calls
2 File Operations and Management
2.1 Understanding File Systems
2.2 Basic File Operations in C
2.3 File Permissions and Security
2.4 Directory Management
2.5 Advanced File Handling
2.6 Working with File Metadata
2.7 Error Handling in File Operations
3 Advanced File I/O Techniques
3.1 Buffered vs. Unbuffered I/O
3.2 Memory-Mapped I/O
3.3 Asynchronous I/O
3.4 File Locking Mechanisms
3.5 Using Select and Poll for I/O Multiplexing
3.6 Advanced Reading and Writing Techniques
3.7 Implementing Efficient Caching Strategies
4 Process Creation and Management
4.1 Understanding Process Concepts
4.2 Creating Processes with fork
4.3 Executing Programs with exec
4.4 Process Termination and Exit Codes
4.5 Managing Process Hierarchies
4.6 Inter-Process Synchronization
4.7 Advanced Process Management Techniques
5 Inter-Process Communication (IPC) Mechanisms
5.1 Fundamentals of IPC
5.2 Pipes and Named Pipes
5.3 Message Queues
5.4 Shared Memory
5.5 Semaphores and Synchronization
5.6 Sockets for Networked IPC
5.7 Advanced IPC Techniques
6 Memory Management in C
6.1 Understanding Memory Layout
6.2 Dynamic Memory Allocation
6.3 Pointer Arithmetic and Memory Access
6.4 Managing Memory Leaks and Overflows
6.5 Using Memory Management Libraries
6.6 Working with Virtual Memory
6.7 Advanced Memory Optimization Techniques
7 Synchronization Techniques
7.1 Fundamentals of Synchronization
7.2 Mutexes and Locks
7.3 Condition Variables
7.4 Semaphores in Synchronization
7.5 Using Barriers for Synchronization
7.6 Atomic Operations
7.7 Advanced Synchronization Patterns
8 Handling Signals in C
8.1 Understanding Signals in Unix-like Systems
8.2 Signal Handling Basics
8.3 Advanced Signal Handling with sigaction
8.4 Blocking and Unblocking Signals
8.5 Signal Sets and Management
8.6 Realtime Signals
8.7 Best Practices for Signal Safety
9 Network Programming Basics
9.1 Fundamentals of Network Protocols
9.2 Socket Programming Basics
9.3 Client-Server Communication
9.4 Working with TCP Sockets
9.5 Using UDP for Connectionless Communication
9.6 Network Address Management
9.7 Handling Errors and Debugging Network Applications
10 Debugging and Profiling System Programs
10.1 Fundamentals of Debugging System Programs
10.2 Using gdb for Interactive Debugging
10.3 Debugging with Valgrind
10.4 Profiling with gprof
10.5 Employing strace and ltrace
10.6 Techniques for Logging and Monitoring
10.7 Best Practices for Efficient Debugging and Profiling
The software architect role is evolving. As systems and their interactions with the teams that build, run, and evolve them become more complex, it's often impossible for those playing the traditional architect roles to be everywhere they need to be. There's simply too much architecture to be done, and the situation has reached a breaking point.
There's a better way. Author Andrew Harmel-Law shows you how architects and development teams can collaborate to create and evolve more efficient architectures for their systems. Techniques in this book will help you learn how to create a mindset that allows everyone to practice architecture and build the best systems they've ever experienced.