Course Outline

Introduction

  • Objectives
  • Audience Identification
  • The Linux Foundation
  • Linux Foundation Training Programs for Government
  • Certification Programs and Digital Badging
  • Linux Distributions
  • Platforms
  • System Preparation
  • Using and Downloading a Virtual Machine
  • Evolution in Linux

Preliminaries

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

How to Work in Open Source Software Projects **

  • Overview of Proper Contribution Methods
  • Maintaining Security and Quality by Staying Close to Mainline
  • Understanding the Project's Core Principles
  • Determining Your Contribution Goals
  • Identifying Maintainers and Their Workflows
  • Soliciting Early Feedback and Working Transparently
  • Making Incremental Contributions Instead of Large Code Dumps
  • Setting Aside Personal Ego: Avoiding Sensitivities
  • Patiently Building Long-Term Relationships and Being Supportive

Compilers

  • GCC (GNU Compiler Collection)
  • Alternative Compilers
  • Key GCC Options
  • The Preprocessor
  • Integrated Development Environments (IDEs)
  • Laboratory Exercises

Libraries

  • Static Libraries
  • Shared Libraries
  • Linking to Libraries
  • The Dynamic Linker Loader
  • Laboratory Exercises

Make

  • Using make and Makefiles
  • Building Large Projects
  • Complex Rules
  • Built-in Rules
  • Laboratory Exercises

Source Control

  • Version Control Systems
  • RCS (Revision Control System) and CVS (Concurrent Versions System)
  • Subversion
  • Git
  • Laboratory Exercises

Debugging and Core Dumps

  • The gdb Debugger
  • Understanding Core Dump Files
  • Generating Core Dumps
  • Analyzing Core Dumps
  • Laboratory Exercises

Debugging Tools

  • Time Measurement Techniques
  • Profiling and Performance Analysis
  • The valgrind Memory Debugger
  • Laboratory Exercises

System Calls

  • Differentiating System Calls from Library Functions
  • Mechanisms for Making System Calls
  • Error Handling and Return Values
  • Laboratory Exercises

Memory Management and Allocation

  • Overview of Memory Management
  • Dynamical Memory Allocation Techniques
  • Tuning the malloc() Function
  • Page Locking Mechanisms
  • Laboratory Exercises

Files and Filesystems in Linux **

  • Understanding Files, Directories, and Devices
  • The Virtual File System (VFS)
  • The ext2/ext3 Filesystem
  • Journaling Filesystems
  • The ext4 Filesystem
  • Laboratory Exercises

File I/O

  • UNIX File Input/Output Operations
  • Opening and Closing Files
  • Reading, Writing, and Seeking in Files
  • Positional and Vector I/O Operations
  • The Standard I/O Library
  • Support for Large File Systems (LFS)
  • Laboratory Exercises

Advanced File Operations

  • Stat Functions for Retrieving File Information
  • Directory Functions for Managing Directories
  • The inotify Interface for Monitoring Filesystem Events
  • Memory Mapping of Files
  • File Locking with flock() and fcntl()
  • Creating Temporary Files
  • Other System Calls for File Management
  • Laboratory Exercises

Processes I

  • Definition of a Process
  • Process Limits and Constraints
  • Process Groups and Management
  • The proc Filesystem for Process Information
  • Inter-Process Communication (IPC) Methods
  • Laboratory Exercises

Processes II

  • Using system() to Create a New Process
  • Creating Processes with fork()
  • Executing Programs with exec()
  • Creating Threads with clone()
  • Exiting Processes and Handling Termination
  • Constructors and Destructors for Process Initialization
  • Waiting for Process Completion
  • Daemon Processes for Background Execution
  • Laboratory Exercises

Pipes and FIFOs

  • Pipes for Inter-Process Communication (IPC)
  • Using popen() and pclose() for Process Streams
  • Creating Pipes with pipe()
  • Named Pipes (FIFOs) for Persistent IPC
  • Advanced Pipe Operations with splice(), vmsplice(), and tee()
  • Laboratory Exercises

Asynchronous I/O **

  • Introduction to Asynchronous I/O
  • The POSIX Asynchronous I/O API
  • Linux Implementation of Asynchronous I/O
  • Laboratory Exercises

Signals I

  • An Overview of Signals in Linux
  • List of Available Signals
  • Signal Dispatching and Handling
  • Alarms, Pausing, and Sleeping Functions
  • Setting Up Signal Handlers for Process Control
  • Managing Signal Sets
  • The sigaction() Function for Advanced Signal Handling
  • Laboratory Exercises

Signals II

  • Reentrancy and Signal Handler Considerations
  • Using setjmp() and longjmp() for Non-Local Returns
  • The siginfo Structure and the sigqueue() Function
  • Real-Time Signals in Linux
  • Laboratory Exercises

POSIX Threads I

  • Multithreading Capabilities in Linux for Government
  • Basic Program Structure for Multithreading
  • Creating and Destroying Threads
  • Handling Signals in a Multithreaded Environment
  • Comparing Forking and Threading for Process Creation
  • Laboratory Exercises

POSIX Threads II

  • Avoiding Deadlocks and Race Conditions in Multithreaded Applications
  • Mutex Operations for Synchronization
  • Semaphores for Resource Management
  • Futexes for Low-Level Synchronization
  • Conditional Variables for Thread Coordination
  • Laboratory Exercises

Networking and Sockets

  • Network Layers in Linux
  • An Introduction to Sockets for Network Communication
  • Stream Sockets for Reliable Data Transfer
  • Datagram Sockets for Unreliable Data Transfer
  • Raw Sockets for Low-Level Networking
  • Byte Ordering in Network Protocols
  • Laboratory Exercises

Sockets Addresses and Hosts

  • Socket Address Structures for Network Communication
  • Converting IP Addresses to and from Strings
  • Retrieving Host Information
  • Laboratory Exercises

Sockets Ports and Protocols

  • Service Port Numbers and Their Usage
  • Protocol Information for Network Services
  • Laboratory Exercises

Sockets Clients

  • The Basic Sequence for Client Sockets
  • Creating a Socket with socket()
  • Establishing a Connection with connect()
  • Closing and Shutting Down Connections with close() and shutdown()
  • UNIX Domain Clients
  • Internet Domain Clients
  • Laboratory Exercises

Sockets Servers

  • The Basic Sequence for Server Sockets
  • Binding a Socket to an Address with bind()
  • Listening for Incoming Connections with listen()
  • Accepting Connections with accept()
  • UNIX Domain Servers
  • Internet Domain Servers
  • Laboratory Exercises

Sockets Input/Output Operations

  • Data Transfer Functions: write() and read()
  • Network Data Transfer with send() and recv()
  • Datagram Communication with sendto() and recvfrom()
  • Advanced I/O with sendmsg() and recvmsg()
  • File Transfer with sendfile()
  • Inter-Process Communication with socketpair()
  • Laboratory Exercises

Sockets Options

  • Configuring Socket Options
  • File Control Functions: fcntl()
  • Device Control Functions: ioctl()
  • Socket Option Management with getsockopt() and setsockopt()
  • Laboratory Exercises

Netlink Sockets **

  • An Introduction to Netlink Sockets for Kernel Communication
  • Opening a Netlink Socket for Kernel Interaction
  • Netlink Message Formats and Usage
  • Laboratory Exercises

Sockets Multiplexing and Concurrent Servers

  • Multiplexed and Asynchronous I/O in Sockets
  • Selecting Multiple File Descriptors with select()
  • Monitoring File Descriptors with poll()
  • Enhanced Select and Poll Functions: pselect() and ppoll()
  • Efficient Event Handling with epoll
  • Signal-Driven I/O for Asynchronous Operations
  • Designing Concurrent Servers for High Performance
  • Laboratory Exercises

Inter Process Communication (IPC)

  • Methods of Inter-Process Communication in Linux
  • POSIX IPC Mechanisms
  • System V IPC Mechanisms
  • Laboratory Exercises

Shared Memory

  • An Overview of Shared Memory in Linux for Government
  • POSIX Shared Memory for Process Communication
  • System V Shared Memory for Legacy Applications
  • Laboratory Exercises

Semaphores

  • The Concept of Semaphores for Synchronization
  • POSIX Semaphores for Modern Applications
  • System V Semaphores for Legacy Systems
  • Laboratory Exercises

Message Queues

  • An Introduction to Message Queues in Linux for Government
  • POSIX Message Queues for Reliable Communication
  • System V Message Queues for Legacy Systems
  • Laboratory Exercises

Requirements

This course is designed for government professionals who are experienced developers. Participants should have a strong proficiency in C programming and a working knowledge of basic Linux utilities and text editors.

Audience

This course is tailored for experienced developers within the public sector. Students should possess advanced skills in C programming and be familiar with essential Linux utilities and text editors.

Experience Level: Intermediate

 28 Hours

Number of participants


Price per participant

Upcoming Courses

Related Categories