| |
| |
Preface | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |
| |
| |
| |
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 | |