Linux Systems Programming using Modern C++

Extensive course in fork/exec, pipe/dup2, tcp sockets, memory mapped I/O and much more with help of C/C++

How to transform a signal to an exception? How to create a process and fill it with new source code? What different ways of communication between processes are there? How to fix a memory-mapped I/O?

We will answer those and many more questions on this very appreciated course.

This course overlap with our course "Linux Systems Programming using C", but adds implementation of several C++ classes that elegant encapsulates all low-level calls to kernal and provide a useful application interface.

This is what you will learn
  • How the address space of a process is organized and why this is interesting
  • The details of function invocation and how exploit that insight
  • How tracking library and system calls
  • Understanding the special file system /proc
  • Asynchronous I/O and memory mapped dito
  • Dealing with signals
  • Managing processes using fork(), exec() and wait()
  • Communication between processes using pipes or fifos
  • POSIX message queues
  • POSIX shared memory segments
  • POSIX semaphores
  • TCP stream sockets
Course Contents

Application

Understanding the concept of a Linux application

    The Process Concept

    • What is a process and dows it differ from a thread
    • Process meta-data

    Virtual Address Space Organization

    • Virtual memory pages
    • Address translation
    • What happens during a page fault
    • Memory areas and their functions

    Compilation and Linking

    • Overview of the various compilation steps
    • Understanding the magic number
    • Creating statically linked libraries
    • Creating dynamically linked libraries
    • Using programs to inspect compiled files such as string, nm, objdump, ldd

    Understanding Function Calls

    • The call stack
    • The content of stack frames
    • The details of a single function call
    • Implementing variable number of function arguments
    • Using setjmp/longjmp
    • Understanding how longjmp is used when C++ throws an exception

    Library and System Calls

    • What is call to a library
    • What is a system call
    • How is the kernel code invoked during a system call
    • Tracing library and system calls

    Memory Management

    • What is dynamic memory anyway
    • The C APIs for using the heap
    • Brief about how to implement heap management
    • Estimating the current heap size
    • Implementing a C++ allocator for use with containers
    • Allocating memory blocks on the call stack
    • Tracking memory leaks with valgrind
    • The C++ APIs for using the heap

    Creating Processes

    • Copying a process with fork
    • Special process IDs
    • Terminating a process
    • What are zombies and daemons
    • Loading a new executable with exec
    • Implementing class Process

    Input / Output

    Different forms of performing I/O

      File Systems

      • What is a file system
      • FS types
      • File types
      • Basic operations on files, from the kernel's perspective
      • I-nodes
      • Directory files
      • File descriptors
      • Devices
      • Mounting devices

      The /proc file system

      • What is the /proc FS
      • Top-level info files
      • Process-specific info files
      • Reading /proc info files using C++

      Regular I/O

      • How to use the kernel API of open/close
      • Opening modes
      • Setting file permissions
      • How to use the kernel API of read/write
      • Changing the file read/write position
      • Manipulating files in the file system
      • Using C++ fstream for binary record-oriented files

      Advanced I/O

      • Manipulation of file descriptors
      • Using memory mapped I/O
      • Using non-blocking I/O
      • Using non-deterministic I/O
      • Implementing class MemoryMappedFile

      Inter-process Communication (IPC)

      Different forms of interchanging data between processes.

        Signals

        • What are signals
        • Sending signals from the shell and from program code
        • Implementing signal handlers
        • Registering signals and signal masks
        • Implementing timeouts
        • Creating interval timers
        • Invoking longjmp from a signal handler
        • Implementing class GlobalSignalHandler
        • How to translate a signal, such as SEGV (segmentation fault) into a C++ exception

        Channels

        • What is a channel
        • Pipes
        • Fifos
        • Implementing class Fifo

        Message Queues

        • What is a message queue and how do it differ from a channel
        • Overview of the API
        • Usages
        • Implementing class MessageQueue

        Shared Memory

        • What is shared memory
        • Overview of the API
        • Usages
        • Implementing class SharedMemory and use it as a C++ allocator

        Semaphores

        • What is a semaphore
        • Memory vs file-system based semaphores
        • Overview of the API
        • Usages
        • Implementing class Semaphore
        • Implementing class FileSystemSemaphore
        • Implementing a message queue with semaphores for use in shared memory

        TCP Sockets

        • What is a TCP socket
        • API overview
        • Network byte order (NBO)
        • Creating client sockets
        • Creating server-side sockets
        • Implementing class Socket
        • Implementing class ServerSocket
        • Implementing a iostreams compatible socket type
        Facts
        NameLinux Systems Programming using Modern C++
        Duration3 Days
        LevelAdvanced
        AudienceExperienced C++ programmers
        PrerequisitesKnowledge about Modern C++
        Tools
        • GCC/G++ compiler, version 8 or later
        • Jetbrains CLion IDE
        • Ubuntu Linux @ VirtualBox or WLS @ Windows-10
        Price19 000 kr + moms 19000
        Course Dates
        DatePlace
        Loading course dates...
        Same-Company Discout

        We offer a 20% discount for additional participants from the same company and at the same course date. Read more here.

        On-Site Course

        If you order an On-Site course, we will come to you and hold the course in your office. The price is determined by our price model and is based on the number of course days, number of participants and any travel and lodging.

        Read more about out price modell and term of sales here.

        Related Courses
        CourseDaysLevel
        C++ Supplementary3 IntermediateShow
        Threads Programming using Modern C++3AdvancedShow
        C++ 11/14/17 for C++ Programmers3 IntermediateShow
        Basic course in Modern C++5BeginnerShow
        Modern C++ for Java Developers4BeginnerShow
        Linux Systems Programming using C3 Advanced Show