Developing Applications For Linux (LFD401) Training Course

Last updated

Course Code



28 hours (usually 4 days including breaks)


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


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

Experience Level: Intermediate


Live Online (Virtual) or Live (Classroom) Live Online (Virtual) or Live (Classroom)

4 days of Instructor-led class time 4 days of Instructor-led class time

Hands-on Labs & Assignment Hands-on Labs & Assignments

Resources & Course Manual Resources & Course Manual

Certificate of Completion Certificate of Completion

Digital Badge Digital Badge

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.

What you will 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.

What you will gain?

This course will prepare you to develop applications for a Linux environment.

Course Outline


  •  Objectives
  •  Who You Are
  •  The Linux Foundation
  •  Linux Foundation Training
  •  Certification Programs and Digital Badging
  •  Linux Distributions
  •  Platforms
  •  Preparing Your System
  •  Using and Downloading a Virtual Machine
  •  Things change in Linux


  •  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 ThinSkinned
  •  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
  •  Builtin 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

  •  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
  •  InterProcess 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 InterProcess 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 NonLocal Returns
  •  siginfo and sigqueue()
  •  Real Time Signals
  •  Labs

POSIX Threads  I

  •  Multithreading 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()
  •  Labs

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

Related Categories

Related Courses

Course Discounts

Course Discounts Newsletter

We respect the privacy of your email address. We will not pass on or sell your address to others.
You can always change your preferences or unsubscribe completely.

Some of our clients

is growing fast!

We are looking to expand our presence in Australia!

As a Business Development Manager you will:

  • expand business in Australia
  • recruit local talent (sales, agents, trainers, consultants)
  • recruit local trainers and consultants

We offer:

  • Artificial Intelligence and Big Data systems to support your local operation
  • high-tech automation
  • continuously upgraded course catalogue and content
  • good fun in international team

If you are interested in running a high-tech, high-quality training and consulting business.

Apply now!

This site in other countries/regions