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