Choose your language
Linux System Programming Course
+400,000 professionals on the platform
Exclusive for businesses

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.

Dedika for students

What your team will master:

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 your team learns practically Linux System Programming Course

How your team practises Linux System Programming Course

Professionals from these companies study at Dedika

ActemiumFR
Nunner LogisticsNL
GT Constructora GeotécnicaCR
Sydel StarBR
Metrô de São PauloBR
Aguas AndinasCL
DSMIN
MeridianbetRS
CDHCN

Course content

8 Chapters • 40 LessonsDuration between 4 and 360 hours (you decide)

Chapter 1See details

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 2See details

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 3See details

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 4See details

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 5See details

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

    Analyses 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 synchronisation 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 synchronisation.

Chapter 6See details

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 behaviour 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 7See details

POSIX Threads and Synchronisation

  • Lesson 1 • Thread Creation and Lifecycle

    Covers pthread_create(), thread attributes, detach state, and pthread_join(). Establishes the thread lifecycle model that all synchronisation topics build upon.

  • Lesson 2 • Read-Write Locks and Barriers

    Covers rwlock for read-heavy workloads and pthread_barrier for phase synchronisation. Extends the synchronisation 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 initialisation, 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 programmes. Teaches patterns for per-thread state that avoid sharing and reduce lock contention.

Chapter 8See details

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.

Certification

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.

Related Courses

FAQ

Who is Dedika?

Is the certificate valid in Kenya?

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