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.
Developing Applications For Linux (LFD401)




- Who You Are
- The Linux Foundation
- Copyright and No Confidential Information
- Linux Foundation Training
- Certification Programs and Digital Badging
- Linux Distributions
- Platforms
- Preparing Your System
- Using and Downloading a Virtual Machine
- Things Change in Linux and Open Source Projects

- Standards and the LSB

- Know Where the Code is Coming From: DCO and CLA
- 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 Thin-Skinned
- Be Patient, Develop Long Term Relationships, Be Helpful

- Other Compilers
- Major gcc Options
- Preprocessor
- Integrated Development Environments (IDE)
- Labs

- Shared Libraries
- Linking To Libraries
- Dynamic Linking Loader
- Labs

- Building large projects
- More complicated rules
- Built-in rules
- Labs

- RCS and CVS
- Subversion
- git
- Labs

- What are Core Dump Files?
- Producing Core Dumps
- Examining Core Dumps
- Labs

- Profiling and Performance
- valgrind
- Address Sanitizer
- Labs

- How System Calls are Made
- Return Values and Error Numbers
- Labs

- Dynamical Allocation
- Tuning malloc()
- Locking Pages
- Labs

- The Virtual File System
- The ext2/ext3 Filesystem
- Journaling Filesystems
- The ext4/ Filesystem
- Labs

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

- Directory Functions
- inotify
- Memory Mapping
- flock() and fcntl()
- Making Temporary Files
- Other System Calls
- Labs

- Process Limits
- Process Groups
- The proc Filesystem
- Inter-Process Communication Methods
- Labs

- Using fork() to Create a Process
- Using exec() to Create a Process
- Using clone()
- Exiting
- Constructors and Destructors
- Waiting
- Daemon Processes
- Labs

- popen() and pclose()
- pipe()
- Named Pipes (FIFOs)
- splice(), vmsplice() and tee()
- Labs

- The POSIX Asynchronous I/O API
- Linux Implementation
- Labs

- Signals Available
- Dispatching Signals
- Alarms, Pausing and Sleeping
- Setting up a Signal Handler
- Signal Sets
- sigaction()
- Labs

- Jumping and Non-Local Returns
- siginfo and sigqueue()
- Real Time Signals
- Labs

- Basic Program Structure
- Creating and Destroying Threads
- Signals and Threads
- Forking vs. Threading
- Labs

- Mutex Operations
- Semaphores
- Futexes
- Conditional Operations
- Labs

- What are Sockets?
- Stream Sockets
- Datagram Sockets
- Raw Sockets
- Byte Ordering
- Labs

- Converting IP Addresses
- Host Information
- Labs

- Protocol Information
- Labs

- socket()
- connect()
- close() and shutdown()
- UNIX Client
- Internet Client
- Labs

- bind()
- listen()
- accept()
- UNIX Server
- Internet Server
- Labs

- send(), recv()
- sendto(), recvfrom()
- sendmsg(), recvmsg()
- sendfile()
- socketpair()
- Labs

- fcntl()
- ioctl()
- getsockopt() and setsockopt()
- Labs

- Opening a netlink Socket
- netlink Messages
- Labs

- select()
- poll()
- pselect() and ppoll()
- epoll
- Signal Driven and Asynchronous I/O
- Concurrent Servers
- Labs

- POSIX IPC
- System V IPC**
- Labs

- POSIX Shared Memory
- System V Shared Memory**
- Labs

- POSIX Semaphores
- System V Semaphores**
- Labs

- POSIX Message Queues
- System V Message Queues**
- Labs
