Developing Applications For Linux (LFD401)


Seminar - Ziel

Learn how to develop applications for the Linux environment. In this instructor-led course, you’ll get hands-on experience with the necessary tools and methods for Linux application development and learn about the features and techniques that are unique to Linux.

In this course you will learn about the tools and methods for developing C programs and doing systems programming under Linux, debugging techniques, process management, Linux specific paid and system calls, and more.

Teilnehmer - Zielgruppe

This course is for experienced developers. Students should be proficient in C programming, and be familiar with basic Linux utilities and text editors.

Kurs - Voraussetzungen

This course is for experienced developers. Students should be proficient in C programming, and be familiar with basic Linux utilities and text editors.


  • 5 Tage
  • 09:00 Uhr bis 17:00 Uhr


  • nach Absprache

Seminar-Inhalt / Agenda


  • Objectives
  • Who You Are
  • The Linux Foundation
  • Linux Foundation Training
  • Linux Distributions
  • Platforms
  • Preparing Your System
  • Using and Downloading a Virtual Machine
  • Things change in Linux
  • Course Registration


  • Procedures
  • Standards and the LSB

How to Work in OSS Projects **

  • Overview on How to Contribute Properly
  • Stay Close to Mainline for Security and Quality
  • Study and Understand the Project DNA
  • Figure Out What Itch You Want to Scratch
  • Identify Maintainers and Their Work Flows and Methods
  • Get Early Input and Work in the Open
  • Contribute Incremental Bits, Not Large Code Dumps
  • Leave Your Ego at the Door: Don’t Be Thin-Skinned
  • Be Patient, Develop Long Term Relationships, Be Helpful


  • GCC
  • Other Compilers
  • Major gcc Options
  • Preprocessor
  • Integrated Development Environments (IDE)
  • Labs


  • Static Libraries
  • Shared Libraries
  • Linking To Libraries
  • Dynamic Linking Loader
  • Labs


  • Using make and Makefiles
  • Building large projects
  • More complicated rules
  • Built-in rules
  • Labs

Source Control

  • Source Control
  • RCS and CVS
  • Subversion
  • git
  • Labs

Debugging and Core Dumps

  • gdb
  • What are Core Dump Files?
  • Producing Core Dumps
  • Examining Core Dumps
  • Labs

Debugging Tools

  • Electric Fence
  • Getting the Time
  • Profiling and Performance
  • valgrind
  • Labs

System Calls

  • System Calls vs. Library Functions
  • How System Calls are Made
  • Return Values and Error Numbers
  • Labs

Memory Management and Allocation

  • Memory Management
  • Dynamical Allocation
  • Tuning malloc()
  • Locking Pages
  • Labs

Files and Filesystems in Linux **

  • Files, Directories and Devices
  • The Virtual File System
  • The ext2/ext3 Filesystem
  • Journaling Filesystems
  • The ext4/ Filesystem
  • Labs

File I/O

  • UNIX File I/O
  • Opening and Closing
  • Reading, Writing and Seeking
  • Positional and Vector I/O
  • Standard I/O Library
  • Large File Support (LFS)
  • Labs

Advanced File Operations

  • Stat Functions
  • Directory Functions
  • inotify
  • Memory Mapping
  • flock() and fcntl()
  • Making Temporary Files
  • Other System Calls
  • Labs

Processes – I

  • What is a Process?
  • Process Limits
  • Process Groups
  • The proc Filesystem
  • Inter-Process Communication Methods
  • Labs

Processes – II

  • Using system() to Create a Process
  • Using fork() to Create a Process
  • Using exec() to Create a Process
  • Using clone()
  • Exiting
  • Constructors and Destructors
  • Waiting
  • Daemon Processes
  • Labs

Pipes and Fifos

  • Pipes and Inter-Process Communication
  • popen() and pclose()
  • pipe()
  • Named Pipes (FIFOs)
  • splice(), vmsplice() and tee()
  • Labs

Asynchronous I/O**

  • What is Asynchronous I/O?
  • The POSIX Asynchronous I/O API
  • Linux Implementation
  • Labs

Signals – I

  • What are Signals?
  • Signals Available
  • Dispatching Signals
  • Alarms, Pausing and Sleeping
  • Setting up a Signal Handler
  • Signal Sets
  • sigaction()
  • Labs

Signals – II

  • Reentrancy and Signal Handlers
  • Jumping and Non-Local Returns
  • siginfo and sigqueue()
  • Real Time Signals
  • Labs

POSIX Threads – I

  • Multi-threading under Linux
  • Basic Program Structure
  • Creating and Destroying Threads
  • Signals and Threads
  • Forking vs. Threading
  • Labs

POSIX Threads – II

  • Deadlocks and Race Conditions
  • Mutex Operations
  • Semaphores
  • Futexes
  • Conditional Operations
  • Labs

Networking and Sockets

  • Networking Layers
  • What are Sockets?
  • Stream Sockets
  • Datagram Sockets
  • Raw Sockets
  • Byte Ordering
  • Labs

Sockets – Addresses and Hosts

  • Socket Address Structures
  • Converting IP Addresses
  • Host Information
  • Labs

Sockets – Ports and Protocols

  • Service Port Information
  • Protocol Information
  • Labs

Sockets – Clients

  • Basic Client Sequence
  • socket()
  • connect()
  • close() and shutdown()
  • UNIX Client
  • Internet Client
  • Labs

Sockets – Servers

  • Basic Server Sequence
  • bind()
  • listen()
  • accept()
  • UNIX Server
  • Internet Server
  • Labs

Sockets – Input/Output Operations

  • write(), read()
  • send(), recv()
  • sendto(), recvfrom()
  • sendmsg(), recvmsg()
  • sendfile()
  • socketpair()
  • Labs

Sockets – Options

  • Getting and Setting Socket Options
  • fcntl()
  • ioctl()
  • getsockopt() and setsockopt()
  • Lab

Netlink Sockets**

  • What are netlink Sockets?
  • Opening a netlink Socket
  • netlink Messages
  • Labs

Sockets – Multiplexing and Concurrent Servers

  • Multiplexed and Asynchronous Socket I/O
  • select()
  • poll()
  • pselect() and ppoll()
  • epoll
  • Signal Driven and Asynchronous I/O
  • Concurrent Servers
  • Labs

Inter Process Communication

  • Methods of IPC
  • System V IPC**
  • Labs

Shared Memory

  • What is Shared Memory?
  • POSIX Shared Memory
  • System V Shared Memory**
  • Labs


  • What is a Semaphore?
  • POSIX Semaphores
  • System V Semaphores**
  • Labs

Message Queues

  • What are Message Queues?
  • POSIX Message Queues
  • System V Message Queues**
  • Labs

Closing and Evaluation Survey

  • Evaluation Survey

Weitere Schulungen zu Thema Linux Foundation

Kubernetes for App Developers (LFD459)

- u.a. in Nürnberg, Berlin, Stuttgart, München, Köln

This course will teach you how to containerize, host, deploy, and configure an application in a multi-node cluster. It also serves as preparation for the Certified Kubernetes Application Developer (CKAD) exam. Starting with a simple Python script, this course will show you how ...

Kubernetes Administration (LFS458)

- u.a. in Nürnberg, Berlin, Stuttgart, München, Köln

In this course you will learn about installation of a multi-node Kubernetes cluster using kubeadm, and how to grow a cluster, choosing and implementing cluster networking, and various methods of application lifecycle management, including scaling, updates and roll-backs. The ...

Linux Security (LFS416)

- u.a. in Berlin, Hannover, Köln, München, Düsseldorf

In this course you will learn how to assess security risks in your enterprise Linux environment, the best techniques and tools to increase security, server hardening, how to deploy and use monitoring and attack detection tools, how to gain visibility into possible ...

Linux Kernel Debugging and Security (LFD440)

- u.a. in Frankfurt am Main, Hamburg, Stuttgart, Wien, Freiburg

This four day course includes extensive hands-on exercises and demonstrations designed to give you the necessary tools to develop and debug Linux kernel code.