Linux Application Development Be the First to Write a Review and tell the world about this title!People who purchase this book frequently purchase: Books on similar topics, in best-seller order:Books from the same publisher, in best-seller order:
"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
Developing in Linux: understanding the operating system, licensing,
and documentation
The development environment: compilers, linker and loader, and unique
debugging tools
System programming: process models, file handling, signal processing,
directory operations, and job control
Terminals, sockets, timers, virtual consoles, and the Linux console
Development libraries: string matching, terminal handling, command-line
parsing, authentication, and more
Hundreds of downloadable code samples
New to this edition
The GNU C library (glibc), underlying standards, and test macros
Writing secure Linux programs, system daemons, and utilities
Significantly expanded coverage of memory debugging, including Valgrind
and mpr
Greatly improved coverage of regular expressions
IPv6 networking coverage, including new system library interfaces for
using IPv6 and IPv4 interchangeably
Coverage of strace, ltrace, real-time signals, poll and epoll system
calls, popt library improvements, Pluggable Authentication Modules (PAM), qdbm,
and much more
Improved index and glossary, plus line-numbered code examples
Table of Contents
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.
About the Author
Michael K. Johnson is a developer for Red Hat Software, a leading provider
of Linux software. Previously, Michael was the editor of the Linux Journal,
and helped found the Linux Documentation Project. A Linux developer since its
original release, he has written or contributed to several standard Linux system
components and now develops system software and configuration tools for Red
Hat LinuxTM. Together with Erik Troan, he is responsible for the key Linux ftp
archives
|