HAPPY BOOKSGIVING
Use code BOOKSGIVING during checkout to save 40%-55% on books and eBooks. Shop now.
Register your product to gain access to bonus material or receive a coupon.
"The first edition of this book has always been kept within arm's reach of my desk due to the wonderful explanations of all areas of the Linux userspace API. This second edition greatly overshadows the first one, and will replace it."
--Greg Kroah-Hartman, Linux kernel programmer
Develop Software that Leverages the Full Power of Today's Linux
Linux Application Development, Second Edition, is the definitive reference for Linux programmers at all levels of experience, including C programmers moving from other operating systems. Building on their widely praised first edition, leading Linux programmers Michael Johnson and Erik Troan systematically present the key APIs and techniques you need to create robust, secure, efficient software or to port existing code to Linux.
This book has been fully updated for the Linux 2.6 kernel, GNU C library version 2.3, the latest POSIX standards, and the Single Unix Specification, Issue 6. Its deep coverage of Linux-specific extensions and features helps you take advantage of the full power of contemporary Linux. Along the way, the authors share insights, tips, and tricks for developers working with any recent Linux distribution, and virtually any version of Unix.
Topics include
New to this edition
List of Tables.
Code Examples.
Preface.
I. GETTING STARTED.
1. History of Linux Development.
A Short History of Free Unix Software.
Development of Linux.
Notional Lineage of Unix Systems.
Linux Lineage.
2. Licenses and Copyright.
Copyright.
Licensing.
Free Software Licenses.
3. Online System Documentation.
The man Pages.
The Info Pages.
Other Documentation.
II. DEVELOPMENT TOOLS AND ENVIRONMENT.
4. Development Tools.
Editors.
Make.
The GNU Debugger.
Tracing Program Actions.
5. gcc Options and Extensions.
gcc Options.
Header Files.
6. The GNU C Library.
Feature Selection.
POSIX Interfaces.
Compatibility.
7. Memory Debugging Tools.
Buggy Code.
Memory-Checking Tools Included in glibc.
Finding Memory Leaks with mpr.
Investigating Memory Errors with Valgrind.
Electric Fence.
8. Creating and Using Libraries.
Static Libraries.
Shared Libraries.
Designing Shared Libraries.
Building Shared Libraries.
Installing Shared Libraries.
Using Shared Libraries.
9. Linux System Environment.
The Process Environment.
Understanding System Calls.
Finding Header and Library Files.
III. SYSTEM PROGRAMMING.
10. The Process Model.
Defining a Process.
Process Attributes.
Process Information.
Process Primitives.
Simple Children.
Sessions and Process Groups.
Introduction to l a d s h.
Creating Clones.
11. Simple File Handling.
The File Mode.
Basic File Operations.
Querying and Changing Inode Information.
Manipulating Directory Entries.
Manipulating File Descriptors.
Creating Unnamed Pipes.
Adding Redirection to l a d s h.
12. Signal Processing.
Signal Concepts.
The Linux (and POSIX) Signal API.
Available Signals.
Writing Signal Handlers.
Reopening Log Files.
Real-Time Signals.
Learning About a Signal.
13. Advanced File Handling.
Input and Output Multiplexing.
Memory Mapping.
File Locking.
Alternatives to read() and write().
14. Directory Operations.
The Current Working Directory.
Changing the Root Directory.
Creating and Removing Directories.
Reading a Directory's Contents.
File Name Globbing.
Adding Directories and Globbing to ladsh.
Walking File System Trees.
Directory Change Notification.
15. Job Control.
Job Control Basics.
Job Control in ladsh.
16. Terminals and Pseudo Terminals.
tty Operations.
termios Overview.
termios Examples.
termios Debugging.
termios Reference.
Pseudo ttys.
17. Networking with Sockets.
Protocol Support.
Utility Functions.
Basic Socket Operations.
Unix Domain Sockets.
Networking Machines with TCP/IP.
Using UDP Datagrams.
Socket Errors.
Legacy Networking Functions.
18. Time.
Telling Time and Dates.
Using Timers.
19. Random Numbers.
Pseudo-Random Numbers.
Cryptography and Random Numbers.
20. Programming Virtual Consoles.
Getting Started.
Beeping.
Determining Whether the Terminal Is a VC.
Finding the Current VC.
Managing VC Switching.
Example: The open Command.
21. The Linux Console.
Capability Databases.
Glyphs, Characters, and Maps.
Linux Console Capabilities.
Direct Screen Writing.
22. Writing Secure Programs.
When Security Matters.
Minimizing the Opportunity for Attack.
Common Security Holes.
Running as a Daemon.
IV. DEVELOPMENT LIBRARIES.
23. String Matching.
Globbing Arbitrary Strings.
Regular Expressions.
24. Terminal Handling with S-Lang.
Input Handling.
Output Handling.
25. A Hashed Database Library.
Overview.
Basic Operations.
Reading Records.
Modifying the Database.
Example.
26. Parsing Command-Line Options.
The Option Table.
Using the Option Table.
Using Callbacks.
Error Handling.
Option Aliasing.
Parsing Argument Strings.
Handling Extra Arguments.
Sample Application.
27. Dynamic Loading at Run Time.
The dl Interface.
28. User Identification and Authentication.
ID-to-Name Translation.
Pluggable Authentication Modules.
APPENDICES.
Appendix A. Header Files.
Appendix B. ladsh Source Code.
Glossary.
Bibliography.
Index.