![]() |
Linux
Application Development |
Michael K. Johnson Erik W. Troan |
| Preface | ||
| Part 1: Getting Started | ||
| History of Linux Development | ||
| A Short History of Free Unix Software | ||
| Development of Linux | ||
| Basic Lineage of Unix Systems | ||
| Linux Lineage | ||
| Licenses and Copyright | ||
| Copyright | ||
| Licensing | ||
| Free Software Licenses | ||
| Combinations of Free and Commercial Software | ||
| The GNU General Public License | ||
| The GNU Library General Public License | ||
| MIT/X-Style Licenses | ||
| BSD-Style Licenses | ||
| Artistic License | ||
| License Incompatibilities | ||
| More Information on Linux | ||
| Overview of Linux Documentation | ||
| The HOWTOs and mini-HOWTOs | ||
| The LDP Books | ||
| The Linux Software Map | ||
| The man Pages | ||
| Other Books | ||
| Source Code | ||
| Linux (and Other) Newsgroups | ||
| Mailing Lists | ||
| vger | ||
| Other Lists | ||
| Other Documentation | ||
| GNU | ||
| BSD | ||
| Your Distribution Vendor | ||
| Part 2: Development Tools and Environment | ||
| Development Tools | ||
| Editors | ||
| Emacs | ||
| vi | ||
| Make | ||
| Complex Command Lines | ||
| Variables | ||
| Suffix Rules | ||
| The GNU Debugger | ||
| gcc Options and Extensions | ||
| gcc Options | ||
| Header Files | ||
| long long | ||
| Inline Functions | ||
| Alternative Extended Keywords | ||
| Attributes | ||
| Memory Debugging Tools | ||
| Buggy Code | ||
| Electric Fence | ||
| Using Electric Fence | ||
| Memory Alignment | ||
| Other Features | ||
| Limitations | ||
| Resource Consumption | ||
| Checker | ||
| Finding Overruns | ||
| Finding Memory Leaks | ||
| mpr and mcheck() | ||
| Finding Memory Corruption with mcheck | ||
| Finding Memory Leaks with mpr | ||
| Creating and Using Libraries | ||
| Static Libraries | ||
| Shared Libraries | ||
| Designing Shared Libraries | ||
| Managing Compatibility | ||
| Incompatible Libraries | ||
| Designing Compatible Libraries | ||
| Building Shared Libraries | ||
| Installing Shared Libraries | ||
| Example | ||
| Using Shared Libraries | ||
| Using Noninstalled Libraries | ||
| Preloading Libraries | ||
| Linux Development Environment | ||
| Understanding System Calls | ||
| System Call Limitations | ||
| System Call Return Codes | ||
| Using System Calls | ||
| Common Error Return Codes | ||
| Finding Header and Library Files | ||
| Part 3: System Programming | ||
| The Process Model | ||
| Defining a Process | ||
| Complicating Things with Threads | ||
| The Linux Approach | ||
| Process Attributes | ||
| The pid and Parentage | ||
| Credentials | ||
| The fsuid | ||
| User and Group ID Summary | ||
| Process Information | ||
| Program Arguments | ||
| Resource Usage | ||
| Establishing Usage Limits | ||
| Process Primitives | ||
| Having Children | ||
| Watching Your Children Die | ||
| Running New Programs | ||
| A Bit of History: vfork() | ||
| Killing Yourself | ||
| Killing Others | ||
| Dumping Core | ||
| Simple Children | ||
| Running and Waiting with system() | ||
| Reading or Writing from a Process | ||
| Sessions and Process Groups | ||
| Sessions | ||
| Controlling Terminal | ||
| Process Groups | ||
| Introduction to ladsh | ||
| Running External Programs with ladsh | ||
| Creating Clones | ||
| Simple File Handling | ||
| The File Mode | ||
| File Access Permissions | ||
| File Permission Modifiers | ||
| File Types | ||
| The Process's umask | ||
| Basic File Operations | ||
| File Descriptors | ||
| Closing Files | ||
| Opening Files in the File System | ||
| Reading, Writing, and Moving Around | ||
| Partial Reads and Writes | ||
| Shortening Files | ||
| Other Operations | ||
| Querying and Changing Inode Information | ||
| Finding Inode Information | ||
| A Simple Example of stat() | ||
| Easily Determining Access Rights | ||
| Changing a File's Access Permissions | ||
| Changing a File's Owner and Group | ||
| Changing a File's Timestamps | ||
| Ext2 Extended Attributes | ||
| Manipulating Directory Entries | ||
| Creating Device and Named Pipe Entries | ||
| Creating Hard Links | ||
| Using Symbolic Links | ||
| Removing Files | ||
| Renaming Files | ||
| Manipulating File Descriptors | ||
| Changing the Access Mode for an Open File | ||
| Modifiying the close-on-exec Flag | ||
| Duplicating File Descriptors | ||
| Creating Unnamed Pipes | ||
| Adding Redirection to ladsh | ||
| The Data Structures | ||
| Changing the Code | ||
| Directory Operations | ||
| The Current Working Directory | ||
| Finding the Current Working Directory | ||
| The . and .. Special Files | ||
| Changing the Current Directory | ||
| Changing the Root Directory | ||
| Creating and Removing Directories | ||
| Creating New Directories | ||
| Removing Directories | ||
| Reading a Directory's Contents | ||
| Starting Over | ||
| File Name Globbing | ||
| Use a Subprocess | ||
| Internal Globbing | ||
| Adding Directories and Globbing to ladsh | ||
| Adding cd and pwd | ||
| Adding File Name Globbing | ||
| Advanced File Handling | ||
| Input and Output Multiplexing | ||
| Nonblocking I/O | ||
| Multiplexing with select() | ||
| Memory Mapping | ||
| Page Alignment | ||
| Establishing Memory Mappings | ||
| Unmapping Regions | ||
| Syncing Memory Regions to Disk | ||
| Locking Memory Regions | ||
| File Locking | ||
| Lock Files | ||
| Record Locking | ||
| Mandatory Locks | ||
| Scatter/Gather Reads and Writes | ||
| Signal Processing | ||
| Signal Concepts | ||
| Simple Signals | ||
| POSIX Signals | ||
| Signals and System Calls | ||
| The Linux (and POSIX) Signal API | ||
| Sending Signals | ||
| Using sigset_t | ||
| Catching Signals | ||
| Manipulating a Process's Signal Mask | ||
| Finding the Set of Pending Signals | ||
| Waiting for Signals | ||
| Available Signals | ||
| Writing Signal Handlers | ||
| Reopening Log Files | ||
| Job Control | ||
| Job Control Basics | ||
| Restarting Processes | ||
| Stopping Processes | ||
| Handling Job Control Signals | ||
| Job Control in ladsh | ||
| Terminals and Pseudo Terminals | ||
| tty Operations | ||
| Controlling Terminals | ||
| termios Overview | ||
| termios Examples | ||
| Passwords | ||
| Serial Communications | ||
| termios Debugging | ||
| termios Reference | ||
| Functions | ||
| Window Sizes | ||
| Flags | ||
| Input Flags | ||
| Output Flags | ||
| Control Flags | ||
| Control Characters | ||
| Local Flags | ||
| Controlling read() | ||
| Pseudo ttys | ||
| Opening Pseudo ttys | ||
| Pseudo tty Example | ||
| Networking with Sockets | ||
| Protocol Support | ||
| Nice Networking | ||
| Real Networking | ||
| Making Reality Play Nice | ||
| Addresses | ||
| Utility Functions | ||
| Basic Socket Operations | ||
| Creating a Socket | ||
| Establishing Connections | ||
| Binding an Address to a Socket | ||
| Waiting for Connections | ||
| Connecting to a Server | ||
| Unix Domain Sockets | ||
| Unix Domain Addresses | ||
| Waiting for a Connection | ||
| Connecting to a Server | ||
| Running the Unix Domain Examples | ||
| Unnamed Unix Domain Sockets | ||
| Passing File Descriptors | ||
| Networking Machines with TCP/IP | ||
| Byte Ordering | ||
| IPv4 Addressing | ||
| IP Socket Addresses | ||
| Manipulating IP Addresses | ||
| Using Hostnames | ||
| Host Information Lookup Example | ||
| Looking Up Port Numbers | ||
| Listening for TCP Connections | ||
| TCP Client Applications | ||
| Socket Errors | ||
| Time | ||
| Telling Time and Dates | ||
| Representing Time | ||
| Converting, Formatting, and Parsing Times | ||
| The Limits of Time | ||
| Using Timers | ||
| Sleeping | ||
| Interval Timers | ||
| Random Numbers | ||
| Pseudo-Random Numbers | ||
| Cryptography and Random Numbers | ||
| Programming Virtual Consoles | ||
| Getting Started | ||
| Beeping | ||
| Determining Whether the Terminal Is a VC | ||
| Finding the Current VC | ||
| Managing VC Switching | ||
| Example: The open Command | ||
| The Linux Console | ||
| Capability Databases | ||
| Glyphs, Characters, and Maps | ||
| Linux Console Capabilities | ||
| Control Characters | ||
| Escape Sequences | ||
| Testing Sequences | ||
| Complex Escape Sequences | ||
| Direct Screen Writing | ||
| Part 4: Development Libraries | ||
| String Matching | ||
| Globbing Arbitrary Strings | ||
| Regular Expressions | ||
| Terminal Handling with S-Lang | ||
| Input Handling | ||
| Initializing S-Lang Input Handling | ||
| Restoring the Terminal State | ||
| Reading Characters from the Terminal | ||
| Checking for Input with SLang_input_pending() | ||
| Output Handling | ||
| Initializing Screen Management | ||
| Updating the Display | ||
| Moving the Cursor | ||
| Finishing Screen Management | ||
| Skeleton Screen Management | ||
| Switching Character Sets | ||
| Writing to the Screen | ||
| Drawing Lines and Boxes | ||
| Using Color | ||
| The Database Library | ||
| Overview | ||
| Basic Operations | ||
| Opening a db File | ||
| Closing a Database | ||
| Obtaining the File Descriptor | ||
| Syncing the Database | ||
| Reading Records | ||
| Reading Records Sequentially | ||
| Reading a Particular Record | ||
| Modifying the Database | ||
| Adding Records | ||
| Removing Records | ||
| Example | ||
| Parsing Command-Line Options | ||
| Basic popt Usage | ||
| The Option Table | ||
| Creating a Context | ||
| Parsing the Command Line | ||
| Leftover Arguments | ||
| Error Handling | ||
| Option Aliasing | ||
| Specifying Aliases | ||
| Enabling Aliases | ||
| Parsing Argument Strings | ||
| Handling Extra Arguments | ||
| Sample Application | ||
| Dynamic Loading at Run Time | ||
| The dl Interface | ||
| Example | ||
| Names and the User Databases | ||
| ID-to-Name Translation | ||
| Example: The id Command | ||
| Modifying the System Databases | ||
| Pluggable Authentication Modules | ||
| Password Database Library | ||
| Appendices | ||
| Direct Access to I/O Ports | ||
| Almost Portable I/O Port Access | ||
| Direct I/O Port Access | ||
| The Safe Way | ||
| The Dangerous Way | ||
| ladsh Source Code | ||
| The GNU Licenses | ||
| The GNU General Public License | ||
| The GNU Library General Public License | ||
| Glossary | ||
| Bibliography | ||
| Index | ||
Copyright © 1998 by Addison Wesley Longman, Inc.