Get in Touch

Course Outline

Introduction

  •  Learning Objectives
  •  Your Background
  •  The Linux Foundation
  •  Linux Foundation Training
  •  Certification Programs and Digital Badging
  •  Linux Distributions
  •  Supported Platforms
  •  System Preparation
  •  Utilizing and Downloading Virtual Machines
  •  Evolution in Linux

Foundations

  •  Procedures
  •  Standards and the LSB (Linux Standard Base)

Contributing to Open Source Software (OSS) Projects **

  •  Overview of Effective Contribution Strategies
  •  Staying Aligned with Mainline for Security and Quality
  •  Understanding the Project's Core Principles
  •  Identifying Areas for Improvement
  •  Identifying Maintainers and Their Workflows
  •  Seeking Early Feedback and Working Transparently
  •  Submitting Incremental Contributions Rather Than Large Code Dumps
  •  Maintaining Professionalism: Avoiding Thin-Skinned Reactions
  •  Building Long-Term Relationships Through Patience and Helpfulness

Compilers

  •  GCC (GNU Compiler Collection)
  •  Alternative Compilers
  •  Key gcc Options
  •  The Preprocessor
  •  Integrated Development Environments (IDE)
  •  Practical Labs

Libraries

  •  Static Libraries
  •  Shared Libraries
  •  Linking to Libraries
  •  Dynamic Linking Loader
  •  Practical Labs

Make

  •  Utilizing make and Makefiles
  •  Building Complex Projects
  •  Advanced Rules
  •  Built-in Rules
  •  Practical Labs

Source Control

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

Debugging and Core Dumps

  •  gdb
  •  Understanding Core Dump Files
  •  Generating Core Dumps
  •  Analyzing Core Dumps
  •  Practical Labs

Debugging Utilities

  •  Timing Operations
  •  Profiling and Performance Analysis
  •  valgrind
  •  Practical Labs

System Calls

  •  System Calls vs. Library Functions
  •  Mechanisms of System Calls
  •  Return Values and Error Codes
  •  Practical Labs

Memory Management and Allocation

  •  Memory Management Concepts
  •  Dynamic Allocation
  •  Optimizing malloc()
  •  Locking Pages
  •  Practical Labs

Files and Filesystems in Linux **

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

File I/O

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

Advanced File Operations

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

Processes  I

  •  Understanding Processes
  •  Process Limits
  •  Process Groups
  •  The proc Filesystem
  •  Inter-Process Communication Methods
  •  Practical Labs

Processes  II

  •  Creating Processes via system()
  •  Creating Processes via fork()
  •  Creating Processes via exec()
  •  Using clone()
  •  Process Termination
  •  Constructors and Destructors
  •  Waiting for Processes
  •  Daemon Processes
  •  Practical Labs

Pipes and Fifos

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

Asynchronous I/O**

  •  Understanding Asynchronous I/O
  •  The POSIX Asynchronous I/O API
  •  Linux Implementation Details
  •  Practical Labs

Signals  I

  •  Understanding Signals
  •  Available Signals
  •  Signal Dispatching
  •  Alarms, Pausing, and Sleeping
  •  Setting Up Signal Handlers
  •  Signal Sets
  •  sigaction()
  •  Practical Labs

Signals  II

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

POSIX Threads  I

  •  Multithreading in Linux
  •  Basic Program Structure
  •  Creating and Destroying Threads
  •  Signals and Threads
  •  Forking vs. Threading
  •  Practical Labs

POSIX Threads  II

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

Networking and Sockets

  •  Networking Layers
  •  Understanding Sockets
  •  Stream Sockets
  •  Datagram Sockets
  •  Raw Sockets
  •  Byte Ordering
  •  Practical Labs

Sockets  Addresses and Hosts

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

Sockets  Ports and Protocols

  •  Service Port Information
  •  Protocol Information
  •  Practical Labs

Sockets  Clients

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

Sockets  Servers

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

Sockets  Input/Output Operations

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

Sockets  Options

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

Netlink Sockets**

  •  Understanding Netlink Sockets
  •  Opening a Netlink Socket
  •  Netlink Messages
  •  Practical 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
  •  Practical Labs

Inter-Process Communication

  •  IPC Methods
  •  POSIX IPC
  •  System V IPC**
  •  Practical Labs

Shared Memory

  •  Understanding Shared Memory
  •  POSIX Shared Memory
  •  System V Shared Memory**
  •  Practical Labs

Semaphores

  •  Understanding Semaphores
  •  POSIX Semaphores
  •  System V Semaphores**
  •  Practical Labs

Message Queues

  •  Understanding Message Queues
  •  POSIX Message Queues
  •  System V Message Queues**
  •  Practical Labs

Requirements

This course is designed for experienced developers. Participants should possess strong proficiency in C programming and familiarity with basic Linux utilities and text editors.

Audience

This course is designed for experienced developers. Participants should possess strong proficiency in C programming and familiarity with basic Linux utilities and text editors.

Experience Level: Intermediate

 28 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories