Course Code: linuxprog
Duration: 32 hours
Prerequisites:
  • Basic programming knowledge (preferably in C/C++)
  • Familiarity with the Linux operating system
Overview:

The "Mastering Linux Programming" workshop is designed to equip participants with a deep understanding of Linux programming concepts, focusing on essential skills and advanced techniques. Over four intensive days, this workshop delves into the fundamental aspects of Linux programming, offering a structured and comprehensive learning experience.

Key Takeaways:

  • In-depth understanding of Linux programming fundamentals
  • Proficiency in process, thread, and inter-process communication management
  • Advanced skills in debugging, profiling, and optimizing Linux applications
  • Practical knowledge applicable in real-world scenarios
Course Outline:

Day 1: Introduction to Linux Programming Fundamentals

Module 1: Introduction to Linux Programming and Concepts

  • Understanding Linux Programming Fundamentals
  • Overview of Bash Scripting (Basic Level)
  • Development Environments and IDEs
  • Program Structure in Linux: Static and Dynamic Libraries

Module 2: Input/Output Operations and Process Management

  • Input/Output Essentials in Linux
  • Asynchronous I/O Operations
  • I/O Multiplexing
  • Processes in Linux
  • OS Management of Processes
  • Process Launch and Termination

Day 2: Processes, IPC, and Signals

Module 2 (Continued): Process Relations and Understanding Zombie Processes

Module 3: Inter-Process Communication and Signals

  • Inter-Process Communication (IPC) Mechanisms
  • Semaphores and Common Memory Zones
  • Message Queues
  • Sockets (UNIX and Internet - TCP/IP)
  • Signals in Linux
  • Signal Types and Characteristics
  • Signal Handlers: Rules, Writing, and Management
  • Sending Signals in Linux

Day 3: Thread Programming and Synchronization

Module 4: Advanced Thread Programming and Synchronization

  • Understanding Timers in Linux
  • POSIX Threads (Pthreads)
  • Creating and Managing Threads
  • Thread Termination and Related Challenges
  • Thread-Related Resources: Semaphore, Mutex, Conditional Variable

Module 5: Advanced Linux System Features

  • Overview of Pipes in Linux
  • Types of Pipes: Process, Low-Level, Named Pipes
  • Daemon Applications: Functionality and Deployment
  • Logging with Syslog: Implementation and Practical Examples

Day 4: Debugging, Profiling, and Conclusion

Module 6: Debugging and Profiling Linux Applications

  • Debugging Linux Applications
  • Multithread Debugging
  • Introduction to GDB and Debugging Commands
  • Remote Debugging Techniques
  • Profiling Applications in Linux
  • Analyzing Resource Consumption
  • Tools for Profiling: Perf, Valgrind, Strace

Conclusion: Course Recap and Practical Applications

  • Summary of Key Concepts Covered
  • Real-world Applications and Practical Implementations
  • Q&A Session and Further Resources