
Linux System Programming Course
Go deep into the Linux kernel and learn to write production-grade C programs that talk directly to the OS. This course covers file I/O, processes, signals, IPC, memory management, sockets, and multithreading from the ground up. Every topic is grounded in real system calls, working code, and the mental models professionals use every day.
What you will learn:
You will build a precise understanding of how Linux manages processes, memory, files, and network connections at the system call level. You will write C programs that use POSIX APIs for file I/O, inter-process communication, and socket-based networking. You will implement multithreaded applications and eliminate data races using pthreads synchronization primitives. You will apply advanced tools including GDB, strace, Valgrind, AddressSanitizer, perf, and io_uring. You will also cover Linux security primitives such as namespaces, seccomp, and capabilities. By the end, you will have the skills to design, debug, and optimize systems software that runs reliably in production Linux environments.
How you study in practice Linux System Programming Course
How you practice Linux System Programming Course
For companies looking to train their teams
With Dedika for businesses, the course includes exercises and examples tailored to your own business and the way your company needs.
Course Content
8 Chapters • 40 LessonsDuration between 4 and 360 hours (you decide)
Chapter 1HideHide detailsSee detailsLinux System Programming Foundations
Linux System Programming Foundations
Lesson 1 • Introduction to System Calls
Demonstrates how user programs invoke kernel services via system calls using glibc wrappers and raw syscall. Connects C library functions to their underlying kernel operations.
Lesson 2 • Linux Architecture and Kernel Overview
Covers kernel space vs. user space, monolithic kernel design, and hardware abstraction. Establishes the conceptual framework all subsequent programming topics depend on.
Lesson 3 • Compiling, Linking, and Loading
Explains the full toolchain pipeline from source to executable, including static and dynamic linking. Prepares students to diagnose build errors and understand binary structure.
Lesson 4 • C Language Essentials for Systems Work
Reviews pointers, memory layout, structs, and bitwise operations critical to systems code. Bridges general C knowledge to the low-level patterns used throughout the course.
Lesson 5 • Development Environment Setup
Configures a Linux dev environment with GCC, GDB, Make, and essential libraries. Ensures every student has a reproducible build baseline before writing any code.
Chapter 2HideHide detailsSee detailsFile I/O and the VFS Layer
File I/O and the VFS Layer
Lesson 1 • Directory and Metadata Operations
Teaches stat(), directory traversal, and link management including hard and symbolic links. Enables programs to inspect and manipulate filesystem structure programmatically.
Lesson 2 • POSIX File Operations
Covers open(), read(), write(), lseek(), and close() with all relevant flags and modes. Teaches correct usage patterns and common pitfalls such as partial reads and writes.
Lesson 3 • Memory-Mapped Files
Demonstrates mmap() for mapping files into process address space for fast I/O and shared data. Connects file I/O to virtual memory concepts introduced in later chapters.
Lesson 4 • File Descriptors and Open Files
Explains the open-file table, file descriptor integers, and kernel data structures behind them. Grounds all subsequent I/O work in a precise model of how the kernel tracks open files.
Lesson 5 • Advanced File Operations
Introduces scatter-gather I/O, file truncation, and hole-punching for sparse files. Extends basic I/O skills to high-performance and storage-efficient scenarios.
Chapter 3HideHide detailsSee detailsProcesses: Creation, Control, and Termination
Processes: Creation, Control, and Termination
Lesson 1 • Process Internals and Attributes
Examines PID, PPID, UID, GID, and the process descriptor fields the kernel maintains. Provides the vocabulary and data model needed to control processes programmatically.
Lesson 2 • Waiting for and Reaping Children
Teaches wait(), waitpid(), and waitid() for collecting child exit status and preventing zombies. Ensures students write leak-free multi-process programs.
Lesson 3 • Executing Programs with exec()
Explains the exec family, argument and environment passing, and what is preserved across exec. Enables students to build shells and process launchers that replace process images correctly.
Lesson 4 • Creating Processes with fork()
Covers copy-on-write semantics, return value handling, and resource inheritance after fork(). Builds the foundation for all multi-process programming patterns in the course.
Lesson 5 • Process Credentials and Privilege
Covers setuid/setgid bits, capability sets, and privilege dropping for secure process design. Prepares students to write programs that handle elevated permissions safely.
Chapter 4HideHide detailsSee detailsSignals: Delivery, Handling, and Masking
Signals: Delivery, Handling, and Masking
Lesson 1 • Signal Concepts and Standard Signals
Introduces signal numbers, default dispositions, and the kernel delivery mechanism. Establishes the conceptual model required before writing any signal-handling code.
Lesson 2 • Signal Masks and Blocking
Teaches sigprocmask(), sigset_t manipulation, and critical section protection via blocking. Enables students to prevent signal races in multi-step operations.
Lesson 3 • Async-Signal-Safe Programming
Identifies async-signal-safe functions and patterns for writing correct, re-entrant handlers. Prevents the subtle bugs that arise from calling unsafe functions inside handlers.
Lesson 4 • Real-Time Signals and signalfd
Covers POSIX real-time signals, queuing guarantees, and the signalfd() interface for synchronous handling. Extends signal skills to high-reliability and event-driven architectures.
Lesson 5 • Installing Signal Handlers
Covers sigaction() structure, SA_flags, and the differences from legacy signal(). Teaches the correct, portable way to install handlers that avoid race conditions.
Chapter 5HideHide detailsSee detailsInter-Process Communication
Inter-Process Communication
Lesson 1 • POSIX Message Queues
Teaches mq_open(), mq_send(), mq_receive(), and priority-based message delivery. Provides a structured, typed alternative to byte-stream pipes for message-oriented IPC.
Lesson 2 • Comparing and Selecting IPC Mechanisms
Analyzes throughput, latency, complexity, and persistence trade-offs across all IPC types. Equips students to make informed architectural decisions in real system designs.
Lesson 3 • POSIX Semaphores
Covers named and unnamed semaphores, sem_wait/sem_post, and mutual exclusion patterns. Provides the synchronization layer needed to use shared memory safely.
Lesson 4 • Pipes and FIFOs
Covers anonymous pipes, FIFO creation, and the producer-consumer pattern for related and unrelated processes. Introduces unidirectional byte-stream IPC as the simplest coordination primitive.
Lesson 5 • POSIX Shared Memory
Demonstrates shm_open(), ftruncate(), and mmap() to create shared memory regions between processes. Enables high-throughput zero-copy data exchange and prepares students for semaphore-based synchronization.
Chapter 6HideHide detailsSee detailsMemory Management and Virtual Memory
Memory Management and Virtual Memory
Lesson 1 • Advanced mmap() Usage
Demonstrates MAP_ANONYMOUS, MAP_FIXED, huge pages, and madvise() for performance tuning. Extends mmap() skills from file I/O to general-purpose memory management.
Lesson 2 • Heap Allocation and the Allocator
Covers malloc(), calloc(), realloc(), free(), and the glibc allocator internals including arenas. Teaches correct allocation patterns and how to avoid heap corruption.
Lesson 3 • Memory Protection and Permissions
Teaches mprotect() for changing page permissions and guard pages for buffer overflow detection. Enables students to implement security-hardening techniques at the memory level.
Lesson 4 • Virtual Memory Architecture
Explains page tables, virtual address space layout, and the /proc/pid/maps interface. Provides the mental model needed to understand allocator behavior and mmap() semantics.
Lesson 5 • Detecting and Fixing Memory Errors
Uses Valgrind, AddressSanitizer, and LeakSanitizer to find leaks, use-after-free, and overflows. Builds the diagnostic skills needed to maintain production-quality memory safety.
Chapter 7HideHide detailsSee detailsPOSIX Threads and Synchronization
POSIX Threads and Synchronization
Lesson 1 • Thread Creation and Lifecycle
Covers pthread_create(), thread attributes, detach state, and pthread_join(). Establishes the thread lifecycle model that all synchronization topics build upon.
Lesson 2 • Read-Write Locks and Barriers
Covers rwlock for read-heavy workloads and pthread_barrier for phase synchronization. Extends the synchronization toolkit to patterns where exclusive locking is too coarse.
Lesson 3 • Condition Variables
Demonstrates pthread_cond_wait(), spurious wakeups, and the predicate loop pattern. Enables threads to efficiently wait for state changes without busy-waiting.
Lesson 4 • Mutexes and Critical Sections
Teaches mutex initialization, lock/unlock discipline, and error-checking mutex types. Provides the primary tool for protecting shared data from concurrent modification.
Lesson 5 • Thread-Local Storage and Safety
Explains __thread, pthread_key_t, and async-signal safety in multi-threaded programs. Teaches patterns for per-thread state that avoid sharing and reduce lock contention.
Chapter 8HideHide detailsSee detailsSockets and Network Programming
Sockets and Network Programming
Lesson 1 • Non-Blocking I/O and epoll
Implements an event-driven server using non-blocking sockets, epoll_create(), and edge-triggered mode. Scales connection handling beyond the one-thread-per-connection model.
Lesson 2 • Socket API Fundamentals
Covers socket(), bind(), listen(), accept(), connect(), and address structures for IPv4 and IPv6. Establishes the core API surface all network programming builds upon.
Lesson 3 • UDP and Datagram Sockets
Covers sendto(), recvfrom(), and connectionless communication patterns for UDP. Contrasts UDP's unreliable delivery with TCP and identifies appropriate use cases.
Lesson 4 • Socket Options and Advanced Features
Teaches getsockopt()/setsockopt() for tuning buffers, keepalive, and Nagle algorithm control. Enables fine-grained performance and reliability tuning of network connections.
Lesson 5 • TCP Client-Server Programming
Implements a full TCP echo server and client with proper connection handling and teardown. Teaches reliable stream communication and the importance of handling partial sends and receives.
Your valid completion certificate
This course is for you:
Backend developers wanting to understand what happens beneath their frameworks.
Embedded engineers transitioning to Linux-based platforms and POSIX APIs.
Computer science graduates bridging the gap between coursework and industry systems work.
DevOps engineers who want to diagnose kernel-level issues without guessing.
Hobbyist C programmers ready to move beyond tutorials into real OS interaction.
Security researchers who need to understand Linux internals to find vulnerabilities.
What our students say
Your classes are perfect. I purchased the one-year package and finally have the opportunity to follow various topics of interest without needing to switch platforms... I thank you for everything you do, I've already recommended you to other people...

I like how the lessons are straight to the point and how I can switch chapters and skip content I don't need.

I like the content and the presentation style and video transcription, which speeds up the process!

The platform is fast, simple to use. The diversity of content and complementary videos really help with learning.

Top trainings
FAQ
Who is Dedika?
Is the certificate valid in United States?
Are the courses free?
What is the course workload?
What are the courses like?
How do the courses work?
What is the duration of the courses?
What is the cost or price of the courses?
What is an EAD or online course and how does it work?
PDF Course




















