Students Free Training

Developing Applications for Linux (LFD401)

Master Linux application development—get hands-on experience with essential tools and techniques in this instructor-led course.

Updated 2026-03-17
English

Description

Master Linux application development—get hands-on experience with essential tools and techniques in this instructor-led course. Discover the unique features of the Linux environment and build the skills to create powerful applications and open doors to career growth.

Summary

Master Linux application development—get hands-on experience with essential tools and techniques in this instructor-led course.

What You'll Learn

  • 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.

Prerequisites

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

Outline

35 modules 4 Days total
  • Objectives
  • Who You Are
  • The Linux Foundation
  • Copyright and No Confidential Information
  • Linux Foundation Training
  • Certification Programs and Digital Badging
  • Linux Distributions
  • Platforms
  • Preparing Your System
  • Using and Downloading a Virtual Machine
  • Things Change in Linux and Open Source Projects
  • Procedures
  • Standards and the LSB
  • Overview on How to Contribute Properly
  • Know Where the Code is Coming From: DCO and CLA
  • 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
  • RCS and CVS
  • Subversion
  • git
  • Labs
  • gdb
  • What are Core Dump Files?
  • Producing Core Dumps
  • Examining Core Dumps
  • Labs
  • Getting the Time
  • Profiling and Performance
  • valgrind
  • Address Sanitizer
  • Labs
  • System Calls vs. Library Functions
  • How System Calls are Made
  • Return Values and Error Numbers
  • Labs
  • Memory Management
  • Dynamical Allocation
  • Tuning malloc()
  • Locking Pages
  • Labs
  • Files, Directories and Devices
  • The Virtual File System
  • The ext2/ext3 Filesystem
  • Journaling Filesystems
  • The ext4/ Filesystem
  • Labs
  • 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
  • Stat Functions
  • Directory Functions
  • inotify
  • Memory Mapping
  • flock() and fcntl()
  • Making Temporary Files
  • Other System Calls
  • Labs
  • What is a Process?
  • Process Limits
  • Process Groups
  • The proc Filesystem
  • Inter-Process Communication Methods
  • Labs
  • 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 Inter-Process Communication
  • popen() and pclose()
  • pipe()
  • Named Pipes (FIFOs)
  • splice(), vmsplice() and tee()
  • Labs
  • What is Asynchronous I/O?
  • The POSIX Asynchronous I/O API
  • Linux Implementation
  • Labs
  • What are Signals?
  • Signals Available
  • Dispatching Signals
  • Alarms, Pausing and Sleeping
  • Setting up a Signal Handler
  • Signal Sets
  • sigaction()
  • Labs
  • Reentrancy and Signal Handlers
  • Jumping and Non-Local Returns
  • siginfo and sigqueue()
  • Real Time Signals
  • Labs
  • Multi-threading under Linux
  • Basic Program Structure
  • Creating and Destroying Threads
  • Signals and Threads
  • Forking vs. Threading
  • Labs
  • Deadlocks and Race Conditions
  • Mutex Operations
  • Semaphores
  • Futexes
  • Conditional Operations
  • Labs
  • Networking Layers
  • What are Sockets?
  • Stream Sockets
  • Datagram Sockets
  • Raw Sockets
  • Byte Ordering
  • Labs
  • Socket Address Structures
  • Converting IP Addresses
  • Host Information
  • Labs
  • Service Port Information
  • Protocol Information
  • Labs
  • Basic Client Sequence
  • socket()
  • connect()
  • close() and shutdown()
  • UNIX Client
  • Internet Client
  • Labs
  • Basic Server Sequence
  • bind()
  • listen()
  • accept()
  • UNIX Server
  • Internet Server
  • Labs
  • write(), read()
  • send(), recv()
  • sendto(), recvfrom()
  • sendmsg(), recvmsg()
  • sendfile()
  • socketpair()
  • Labs
  • Getting and Setting Socket Options
  • fcntl()
  • ioctl()
  • getsockopt() and setsockopt()
  • Labs
  • What are netlink Sockets?
  • Opening a netlink Socket
  • netlink Messages
  • Labs
  • Multiplexed and Asynchronous Socket I/O
  • select()
  • poll()
  • pselect() and ppoll()
  • epoll
  • Signal Driven and Asynchronous I/O
  • Concurrent Servers
  • Labs
  • Methods of IPC
  • POSIX IPC
  • System V IPC
  • Labs
  • What is Shared Memory?
  • POSIX Shared Memory
  • System V Shared Memory
  • Labs
  • What is a Semaphore?
  • POSIX Semaphores
  • System V Semaphores
  • Labs
  • What are Message Queues?
  • POSIX Message Queues
  • System V Message Queues
  • Labs