Thank you for sending your enquiry! One of our team members will contact you shortly.
Thank you for sending your booking! One of our team members will contact you shortly.
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