The Linux Programmer's Toolbox

  • ISBN13:


  • ISBN10:


  • Edition: 1st
  • Format: Paperback
  • Copyright: 2007-03-06
  • Publisher: Prentice Hall
  • Purchase Benefits
  • Free Shipping On Orders Over $35!
    Your order must be $35 or more to qualify for free economy shipping. Bulk sales, PO's, Marketplace items, eBooks and apparel do not qualify for this offer.
  • Get Rewarded for Ordering Your Textbooks! Enroll Now
List Price: $49.99 Save up to $7.50
  • Buy New
    Add to Cart Free Shipping


Supplemental Materials

What is included with this book?

  • The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.
  • The eBook copy of this book is not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.


A hands-on, example-rich, practical guide to the complex and often confusing world of software development tools for Linux developers.

Author Biography

John Fusco is a software developer for GE Healthcare who specializes in Linux applications and device drivers. He has worked on Unix software for more than ten years and has been developing applications for Linux since kernel version 2.0. He has written articles for Embedded Systems Programming and Linux Journal.

Table of Contents

Forewordp. xvii
Prefacep. xix
Acknowledgmentsp. xxiii
About the Authorp. xxv
Downloading and Installing Open Source Toolsp. 1
Introductionp. 1
What Is Open Source?p. 2
What Does Open Source Mean to You?p. 2
An Introduction to Archive Filesp. 4
Know Your Package Managerp. 12
Some Words about Security and Packagesp. 17
Inspecting Package Contentsp. 27
Keeping Packages up to Datep. 33
Summaryp. 39
Building from Sourcep. 41
Introductionp. 41
Build Toolsp. 41
The Build Processp. 74
Understanding Errors and Warningsp. 78
Summaryp. 100
Finding Helpp. 103
Introductionp. 103
Online Help Toolsp. 103
Other Places to Lookp. 120
Documentation Formatsp. 124
Internet Sources of Informationp. 131
Finding Information about the Linux Kernelp. 134
Summaryp. 138
Editing and Maintaining Source Filesp. 141
Introductionp. 141
The Text Editorp. 142
Revision Controlp. 189
Source Code Beautifiers and Browsersp. 203
Summaryp. 216
What Every Developer Should Know about the Kernelp. 221
Introductionp. 221
User Mode versus Kernel Modep. 222
The Process Schedulerp. 226
Understanding Devices and Device Driversp. 257
The I/O Schedulerp. 282
Memory Management in User Spacep. 286
Summaryp. 315
Understanding Processesp. 317
Introductionp. 317
Where Processes Come Fromp. 317
The exec Functionsp. 320
Process Synchronization with waitp. 327
The Process Footprintp. 329
Setting Process Limitsp. 340
Processes and procfsp. 343
Tools for Managing Processesp. 346
Summaryp. 355
Communication between Processesp. 357
Introductionp. 357
IPC Using Plain Filesp. 358
Shared Memoryp. 363
Signalsp. 370
Pipesp. 381
Socketsp. 382
Message Queuesp. 393
Semaphoresp. 402
Summaryp. 412
Debugging IPC with Shell Commandsp. 415
Introductionp. 415
Tools for Working with Open Filesp. 415
Dumping Data from a Filep. 420
Shell Tools for System V IPCp. 426
Tools for Working with POSIX IPCp. 431
Tools for Working with Signalsp. 434
Tools for Working with Pipes and Socketsp. 437
Using Inodes to Identify Files and IPC Objectsp. 440
Summaryp. 442
Performance Tuningp. 445
Introductionp. 445
System Performancep. 445
Application Performancep. 475
Multiprocessor Performancep. 501
Summaryp. 509
Debuggingp. 513
Introductionp. 513
The Most Basic Debugging Tool: printfp. 514
Getting Comfortable with the GNU Debugger: gdbp. 529
Debugging Shared Objectsp. 561
Looking for Memory Issuesp. 569
Unconventional Techniquesp. 583
Summaryp. 594
Indexp. 597
Table of Contents provided by Publisher. All Rights Reserved.


Linux has no shortage of tools. Many are inherited from Unix, with cryptic two-letter names that conjure up images of developers trying to preserve space on a punch card. Happily, those days are long gone, but the legacy remains. Many of those old tools are still quite useful. Most are highly specialized. Each may do only one thing but does it very well. Highly specialized tools often have many options that can make them intimidating to use. Consider the first time you used grepand learned what a regular expression was. Perhaps you haven't mastered regular expression syntax yet (don't worry; no one else has, either). That's not important, because you don't need to be a master of regular expressions to put grep to good use. If there's one thing that I hope you learn from this book, it's that there are many tools out there that you can use without having to master them. You don't need to invest an enormous amount of time reading manuals before you can be productive. I hope you will discover new tools that you may not have been familiar with. Some of the tools this book looks at are quite old and some are new. All of them are useful. As you learn more about each tool, you will find more uses for it. I use the term tool loosely in this book. To me, creating tools is as important as using tools, so I have included various APIs that are not usually covered in much detail in other books. In addition, this book provides some background on the internal workings of the Linux kernel that are necessary to understand what some tools are trying to tell you. I present a unique perspective on the kernel: the user's point of view. You will find enough information to allow you to understand the ground rules that the kernel sets for every process, and I promise you will not have to read a single line of kernel source code. What you will not find in this book is reconstituted man pages or other documentation stitched into the text. The GNU and Linux developers have done a great job of documenting their work, but that documentation can be hard to find for the inexperienced user. Rather than reprint documentation that will be out of date by the time you read this, I show you some ingenious ways to find the most up-to-date documentation. GNU/Linux documentation is abundant, but it's not always easy to read. You can read a 10,000-word document for a tool and still not have a clue what the tool does or how to use it. This is where I have tried to fill in the missing pieces. I have tried to explain not just how to use each tool, but also why you would want to use it. Wherever possible, I have provided simple, brief examples that you can type and modify yourself to enhance your understanding of the tools and Linux itself. What all the tools in this book have in common is that they are available at no cost. Most come with standard Linux distributions, and for those that may not, I have included URLs so that you can download them yourself. As much as possible, I tried to keep the material interesting and fun. Who Should Read This Book This book is written for intermediate to advanced Linux programmers who wish to become more productive and gain a better understanding of the Linux programming environment. If you're an experienced Windows programmer who feels like a fish out of water in the Linux environment, then this book is for you, too. Non-programmers should also find this book useful because many of the tools and topics I cover have applications beyond programming. If you are a system administrator, or just a Linux enthusiast, then there's something for you in this book, too. The Purpose of This Book I wrote this book as a follow-up to an article I wrote for the Linux Journal entitled "Ten Commands Every Linux Developer Should Know." The inspiration for this article came from my own experience as a Linux programmer. In my daily work I make it a point to invest some of my ti

Rewards Program

Write a Review