Erfolg durch Weiterbildung

Seminar Linux/UNIX System Programming

Dieser Kurs wird in englischer Sprache vom unserem Linux Experten Michael Kerrisk durchgeführt.
This course will be held in english from the linux expert Michael Kerrisk.


5 Tage


2.700,00 €
3.213,00 € inkl. 19% ges. MwSt.
This course provides a deep understanding of the operating system architecture and low-level interfaces required to build system-level applications on Linux and UNIX systems ranging from embedded processors to enterprise servers. Detailed presentations coupled with many carefully designed practical exercises provide participants with the knowledge needed to write complex system, network, and multithreaded applications. The course dives into many specifics of the Linux system, but makes careful and frequent reference to the POSIX standard, so that it is also valuable to developers working on other UNIX systems.
The audience for this course includes programmers developing and porting system-level and network applications for Linux and UNIX systems, embedded application developers, security engineers, site reliability engineers, and DevOps engineers.

  • To get the most out of the course, participants should have:
    • Good reading knowledge of the C programming language
    • Solid programming experience in a language suitable for completing the course exercises (e.g., C, C++, D, Go, Rust, or Python)
    • Knowledge of basic UNIX/Linux shell commands

Previous system programming experience is not required.
  • 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(), close()
    • The file offset and lseek()
    • Atomicity
    • Relationship between file descriptors and open files
    • Duplicating file descriptors
    • File status flags (and fcntl())
  • File I/O Buffering
    • Kernel buffering
    • User-space (stdio) buffering
    • Controlling kernel buffering
  • Files
    • Inodes
    • Retrieving file information: stat()
    • File mode
    • Changing file attributes
  • Directories and Links (*)
    • Directories and (hard) links
    • Symbolic links
    • 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 groups and
    • Nonlocal gotos
  • Process Credentials
    • Users and groups
    • Process credentials
    • Retrieving process credentials
  • Signals: Introduction
    • Signal dispositions
    • Signal handlers
    • Useful signal-related functions
    • Signal sets, the signal mask, and pending signals
  • Signals: Signal Handlers
    • Designing signal handlers
    • Async-signal-safe functions
    • Interrupted system calls
  • Signals: Further Details (*)
    • Sending signals from a program
    • SA_SIGINFO signal handlers
    • Realtime signals
  • Process Creation and Termination
    • Creating a new process: fork()
    • File descriptors and fork()
    • Process termination
    • Monitoring child processes
    • Orphans and zombies
    • The SIGCHLD signal
    • Exit handlers (*)
  • Executing Programs
    • Executing programs: execve()
    • The exec() library functions
    • File descriptors and exec()
  • System Call Tracing with strace
    • Getting started
    • Tracing child processes
    • Filtering strace output
  • Privileged Programs
    • Process credentials
    • Set-user-ID and set-group-ID programs
    • Changing process credentials
  • Threads: Introduction
    • Pthreads API basics
    • Thread creation and termination
    • Thread IDs
    • Joining and detaching threads
    • Thread attributes
    • Signals and threads
    • Threads and process control
  • Threads: Synchronization
    • Shared resources and critical sections
    • Mutexes
    • Locking and unlocking a mutex
    • Condition variables
    • Signaling and waiting on condition variables
    • Dynamically initialized mutexes
    • Dynamically initialized condition variables
    • Other synchronization primitives
  • IPC: Introduction and Overview
    • Categorizing IPC
    • Choosing an IPC mechanism
  • Pipes and FIFOs
    • Creating and using pipes
    • Connecting filters with pipes
    • FIFOs
  • Sockets: Concepts and UNIX Domain
    • Socket types and domains
    • Creating and binding a socket
    • System calls: stream sockets
    • UNIX domain stream sockets
    • System calls: datagram sockets
    • UNIX domain datagram sockets
    • Further details of UNIX domain sockets
  • Sockets: Internet Domain
    • Internet domain sockets
    • Data-representation issues
    • Loopback and wildcard addresses
    • Host addresses and port numbers
    • Host and service conversion
    • Internet domain sockets example
    • Additional sockets system calls
  • Alternative I/O Models
    • Nonblocking I/O
    • Signal-driven I/O
    • I/O multiplexing: poll()
    • Problems with poll() and select()
    • The epoll API
    • epoll events
    • epoll: edge-triggered notification
    • epoll: API quirks
    • Event-loop programming
  • POSIX IPC Overview
  • POSIX Semaphores
    • Named semaphores
    • Semaphore operations
    • Synchronizing access to a shared resource
    • Unnamed semaphores
  • POSIX Shared Memory
    • Creating & opening SHM objects
    • Using SHM objects
    • Synchronizing access to SHM
  • POSIX Message Queues (*)
    • Opening, closing, and unlinking a message queue
    • Message queue attributes
    • Sending and receiving messages
    • The mqueue filesystem
    • Message queue limits and defaults
    • Message notification via a signal
    • Message notification via a thread
  • Daemons (*)
    • Creating a daemon
    • Reinitializing a daemon
  • Time (*)
    • Calendar time
    • Elapsed time
    • Process time
  • Timers and Sleeping (*)
    • Historic timer APIs
    • POSIX timers
    • POSIX timers: notification
    • POSIX timers: timer overruns
    • Sleeping

Topics marked with an asterisk (*) are optional, and will be covered as time permits
Five days, with up to 50% devoted to practical sessions.

  • Course materials:
    • Two course books (written by the trainer) that include all slides and exercises presented in the course
    • A copy of the trainer’s book, The Linux Programming Interface
    • A source code tarball containing around 30,000 lines of example code written by the trainer
Termin anfragen
Fragen Sie Ihren Wunschtermin an.
Das Seminar wird individuell auf Ihre Bedürfnisse abgestimmt und in Ihren Räumlichkeiten durchgeführt.
Sie bestimmen die Inhalte, den Zeitpunkt und Dauer des Seminars.
Das Seminar findet ausschließlich mit Teilnehmern Ihrer Firma in unseren Räumlichkeiten statt und wird individuell auf Sie abgestimmt.
Sie bestimmen die Inhalte, den Zeitpunkt und Dauer des Seminars.
Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Dienste erklären Sie sich damit einverstanden, dass wir Cookies verwenden.
Weitere Informationen Ok