The Linux Programmer's Toolbox (Paperback)
內容描述
Description
Master the
Linux Tools That Will Make You a More Productive, Effective
Programmer
The Linux
Programmer's Toolbox helps you tap into
the vast collection of open source tools available for GNU/Linux. Author John
Fusco systematically describes the most useful tools available on most
GNU/Linux distributions using concise examples that you can easily modify to
meet your needs.
You'll start by
learning the basics of downloading, building, and installing open source
projects. You'll then learn how open source tools are distributed, and what to
look for to avoid wasting time on projects that aren't ready for you. Next,
you'll learn the ins and outs of building your own projects. Fusco also
demonstrates what to look for in a text editor, and may even show you a few
new tricks in your favorite text editor.
You'll enhance
your knowledge of the Linux kernel by learning how it interacts with your
software. Fusco walks you through the fundamentals of the Linux kernel with
simple, thought-provoking examples that illustrate the principles behind the
operating system. Then he shows you how to put this knowledge to use with more
advanced tools. He focuses on how to interpret output from tools like sar,
vmstat, valgrind, strace, and apply it to your application; how to take
advantage of various programming APIs to develop your own tools; and how to
write code that monitors itself.
Next, Fusco
covers tools that help you enhance the performance of your software. He
explains the principles behind today's multicore CPUs and demonstrates how to
squeeze the most performance from these systems. Finally, you'll learn tools
and techniques to debug your code under any circumstances.
Coverage
includes
Maximizing productivity with editors, revision
control tools, source code browsers, and "beautifiers"
Interpreting the kernel: what your tools are
telling you
Understanding processes—and the tools
available for managing them
Tracing and resolving application bottlenecks
with gprof and valgrind
Streamlining and automating the documentation
process
Rapidly finding help, solutions, and
workarounds when you need them
Optimizing program code with sar, vmstat,
iostat, and other tools
Debugging IPC with shell commands: signals,
pipes, sockets, files, and IPC objects
Using printf, gdb, and other essential
debugging tools
Table of
Contents
Foreword xvii
Preface xix
Acknowledgments xxiii
About the Author xxv
Chapter 1 Downloading and Installing Open Source
Tools 1
1.1 Introduction 1
1.2 What Is Open Source? 2
1.3 What Does Open Source Mean to You?
2
1.4 An Introduction to Archive Files 4
1.5 Know Your Package Manager 12
1.6 Some Words about Security and Packages
17
1.7 Inspecting Package Contents 27
1.8 Keeping Packages up to Date 33
1.9 Summary 39
Chapter 2 Building from Source 41
2.1 Introduction 41
2.2 Build Tools 41
2.3 The Build Process 74
2.4 Understanding Errors and Warnings 78
2.5 Summary 100
Chapter 3 Finding Help 103
3.1 Introduction 103
3.2 Online Help Tools 103
3.3 Other Places to Look 120
3.4 Documentation Formats 124
3.5 Internet Sources of Information
131
3.6 Finding Information about the Linux Kernel
134
3.7 Summary 138
Chapter 4 Editing and Maintaining Source Files
141
4.1 Introduction 141
4.2 The Text Editor 142
4.3 Revision Control 189
4.4 Source Code Beautifiers and Browsers 203
4.5 Summary 216
Chapter 5 What Every Developer Should Know about
the Kernel 221
5.1 Introduction 221
5.2 User Mode versus Kernel Mode 222
5.3 The Process Scheduler 226
5.4 Understanding Devices and Device Drivers 257
5.5 The I/O Scheduler 282
5.6 Memory Management in User Space 286
5.7 Summary 315
Chapter 6 Understanding Processes 317
6.1 Introduction 317
6.2 Where Processes Come From 317
6.3 The exec Functions 320
6.4 Process Synchronization with wait
327
6.5 The Process Footprint 329
6.6 Setting Process Limits 340
6.7 Processes and procfs 343
6.8 Tools for Managing Processes 346
6.9 Summary 355
Chapter 7 Communication between Processes 357
7.1 Introduction 357
7.2 IPC Using Plain Files 358
7.3 Shared Memory 363
7.4 Signals 370
7.5 Pipes 381
7.6 Sockets 382
7.7 Message Queues 393
7.8 Semaphores 402
7.9 Summary 412
Chapter 8 Debugging IPC with Shell Commands
415
8.1 Introduction 415
8.2 Tools for Working with Open Files
415
8.3 Dumping Data from a File 420
8.4 Shell Tools for System V IPC 426
8.5 Tools for Working with POSIX IPC 431
8.6 Tools for Working with Signals 434
8.7 Tools for Working with Pipes and Sockets 437
8.8 Using Inodes to Identify Files and IPC
Objects 440
8.9 Summary 442
Chapter 9 Performance Tuning 445
9.1 Introduction 445
9.2 System Performance 445
9.3 Application Performance 475
9.4 Multiprocessor Performance 501
9.5 Summary 509
Chapter 10 Debugging 513
10.1 Introduction 513
10.2 The Most Basic Debugging Tool: printf
514
10.3 Getting Comfortable with the GNU Debugger:
gdb 529
10.4 Debugging Shared Objects 561
10.5 Looking for Memory Issues 569
10.6 Unconventional Techniques 583
10.7 Summary 594
Index
597