This book is about writing software that makes the most effective use of the system you're running on -- code that interfaces directly with the kernel and core system libraries, including the shell, text editor, compiler, debugger, core utilities, and system daemons. The majority of both Unix and Linux code is still written at the system level, and Linux System Programming focuses on everything above the kernel, where applications such as Apache, bash, cp, vim, Emacs, gcc, gdb, glibc, ls, mv, and X exist.
Written primarily for engineers looking to program (better) at the low level, this book is an ideal teaching tool for any programmer. Even with the trend toward high-level development, either through web software (such as PHP) or managed code (C#), someone still has to write the PHP interpreter and the C# virtual machine. Linux System Programming gives you an understanding of core internals that makes for better code, no matter where it appears in the stack. Debugging high-level code often requires you to understand the system calls and kernel behavior of your operating system, too.
Key topics include: - An overview of Linux, the kernel, the C library, and the C compiler
- Reading from and writing to files, along with other basic file I/O operations, including how the Linux kernel implements and manages file I/O
- Buffer size management, including the Standard I/O library
- Advanced I/O interfaces, memory mappings, and optimization techniques
- The family of system calls for basic process management
- Advanced process management, including real-time processes
- File and directories-creating, moving, copying, deleting, and managing them
- Memory management -- interfaces for allocating memory, managing the memory you have, and optimizing your memory access
- Signals and their role on a Unix system, plus basic and advanced signal interfaces
- Time, sleeping, and clock management, starting with the basics and continuing through POSIX clocks and high resolution timers
With Linux System Programming, you will be able to take an in-depth look at Linux from both a theoretical and an applied perspective as you cover a wide range of programming topics.
About the Author Robert Love has been a Linux user and hacker since the early days. He is active in--and passionate about--the Linux kernel and GNOME desktop communities. His recent contributions to the Linux kernel include work on the kernel event layer and inotify. GNOME-related contributions include Beagle, GNOME Volume Manager, NetworkManager, and Project Utopia. Currently, Robert works in the Open Source Program Office at Google.
Robert is the author of Linux Kernel Development (SAMS 2005) and the co-author of Linux in a Nutshell (2006 O'Reilly). He is also a Contributing Editor at Linux Journal. He is currently working on a new work for O'Reilly that will be the greatest book ever written, give or take. Robert holds a B.A. in Mathematics and a B.S. in Computer Science from the University of Florida. A proud Gator, Robert was born in South Florida but currently calls home Cambridge, MA.
Table of contents Chapter 1 Introduction and Essential Concepts - System Programming
- APIs and ABIs
- Standards
- Concepts of Linux Programming
- Getting Started with System Programming
Chapter 2 File I/O - Opening Files
- Reading via read( )
- Writing with write( )
- Synchronized I/O
- Direct I/O
- Closing Files
- Seeking with lseek( )
- Positional Reads and Writes
- Truncating Files
- Multiplexed I/O
- Kernel Internals
- Conclusion
Chapter 3 Buffered I/O - User-Buffered I/O
- Standard I/O
- Opening Files
- Opening a Stream via File Descriptor
- Closing Streams
- Reading from a Stream
- Writing to a Stream
- Sample Program Using Buffered I/O
- Seeking a Stream
- Flushing a Stream
- Errors and End-of-File
- Obtaining the Associated File Descriptor
- Controlling the Buffering
- Thread Safety
- Critiques of Standard I/O
- Conclusion
Chapter 4 Advanced File I/O - Scatter/Gather I/O
- The Event Poll Interface
- Mapping Files into Memory
- Advice for Normal File I/O
- Synchronized, Synchronous, and Asynchronous Operations
- I/O Schedulers and I/O Performance
- Conclusion
Chapter 5 Process Management - The Process ID
- Running a New Process
- Terminating a Process
- Waiting for Terminated Child Processes
- Users and Groups
- Sessions and Process Groups
- Daemons
- Conclusion
Chapter 6 Advanced Process Management - Process Scheduling
- Yielding the Processor
- Process Priorities
- Processor Affinity
- Real-Time Systems
- Resource Limits
Chapter 7 File and Directory Management - Files and Their Metadata
- Directories
- Links
- Copying and Moving Files
- Device Nodes
- Out-of-Band Communication
- Monitoring File Events
- Chapter 8 Memory Management
- The Process Address Space
- Allocating Dynamic Memory
- Managing the Data Segment
- Anonymous Memory Mappings
- Advanced Memory Allocation
- Debugging Memory Allocations
- Stack-Based Allocations
- Choosing a Memory Allocation Mechanism
- Manipulating Memory
- Locking Memory
- Opportunistic Allocation
Chapter 9 Signals - Signal Concepts
- Basic Signal Management
- Sending a Signal
- Reentrancy
- Signal Sets
- Blocking Signals
- Advanced Signal Management
- Sending a Signal with a Payload
- Conclusion
Chapter 10 Time - Time's Data Structures
- POSIX Clocks
- Getting the Current Time of Day
- Setting the Current Time of Day
- Playing with Time
- Tuning the System Clock
- Sleeping and Waiting
- Timers
- Appendix GCC Extensions to the C Language
- GNU C
- Inline Functions
- Suppressing Inlining
- Pure Functions
- Constant Functions
- Functions That Do Not Return
- Functions That Allocate Memory
- Forcing Callers to Check the Return Value
- Marking Functions As Deprecated
- Marking Functions As Used
- Marking Functions or Parameters As Unused
- Packing a Structure
- Increasing the Alignment of a Variable
- Placing Global Variables in a Register
- Branch Annotation
- Getting the Type of an Expression
- Getting the Alignment of a Type
- The Offset of a Member Within a Structure
- Obtaining the Return Address of a Function
- Case Ranges
- Void and Function Pointer Arithmetic
- More Portable and More Beautiful in One Fell Swoop
Bibliography
Colophon