
Book 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
Foreword
Preface
Acknowledgments
About the Author
Chapter 1 Downloading and Installing Open Source Tools
Chapter 2 Building from Source
Chapter 3 Finding Help
Chapter 4 Editing and Maintaining Source Files
Chapter 5 What Every Developer Should Know about the Kernel
Chapter 6 Understanding Processes
Chapter 7 Communication between Processes
Chapter 8 Debugging IPC with Shell Commands
Chapter 9 Performance Tuning
Chapter 10 Debugging
Index
About the Author
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.



Book Description
This book is about writing software that makes the most effective use of the system you're running on -- code that interfaces directly with the kernel and core system libraries, including the shell, text editor, compiler, debugger, core utilities, and system daemons. The majority of both Unix and Linux code is still written at the system level, and Linux System Programming focuses on everything above the kernel, where applications such as Apache, bash, cp, vim, Emacs, gcc, gdb, glibc, ls, mv, and X exist.
Written primarily for engineers looking to program (better) at the low level, this book is an ideal teaching tool for any programmer. Even with the trend toward high-level development, either through web software (such as PHP) or managed code (C#), someone still has to write the PHP interpreter and the C# virtual machine. Linux System Programming gives you an understanding of core internals that makes for better code, no matter where it appears in the stack. Debugging high-level code often requires you to understand the system calls and kernel behavior of your operating system, too.
Key topics include:
An overview of Linux, the kernel, the C library, and the C compiler
Reading from and writing to files, along with other basic file I/O operations, including how the Linux kernel implements and manages file I/O
Buffer size management, including the Standard I/O library
Advanced I/O interfaces, memory mappings, and optimization techniques
The family of system calls for basic process management
Advanced process management, including real-time processes
File and directories-creating, moving, copying, deleting, and managing them
Memory management -- interfaces for allocating memory, managing the memory you have, and optimizing your memory access
Signals and their role on a Unix system, plus basic and advanced signal interfaces
Time, sleeping, and clock management, starting with the basics and continuing through POSIX clocks and high resolution timers
With Linux System Programming, you will be able to take an in-depth look at Linux from both a theoretical and an applied perspective as you cover a wide range of programming topics.


Book Description
If you've ever wondered how Linux carries out the complicated tasks assigned to it by the IP protocols -- or if you just want to learn about modern networking through real-life examples -- Understanding Linux Network Internals is for you.
Like the popular O'Reilly book, Understanding the Linux Kernel, this book clearly explains the underlying concepts and teaches you how to follow the actual C code that implements it. Although some background in the TCP/IP protocols is helpful, you can learn a great deal from this text about the protocols themselves and their uses. And if you already have a base knowledge of C, you can use the book's code walkthroughs to figure out exactly what this sophisticated part of the Linux kernel is doing.
Part of the difficulty in understanding networks -- and implementing them -- is that the tasks are broken up and performed at many different times by different pieces of code. One of the strengths of this book is to integrate the pieces and reveal the relationships between far-flung functions and data structures. Understanding Linux Network Internals is both a big-picture discussion and a no-nonsense guide to the details of Linux networking. Topics include:
Key problems with networking
Network interface card (NIC) device drivers
System initialization
Layer 2 (link-layer) tasks and implementation
Layer 3 (IPv4) tasks and implementation
Neighbor infrastructure and protocols (ARP)
Bridging
Routing
ICMP
Author Christian Benvenuti, an operating system designer specializing in networking, explains much more than how Linux code works. He shows the purposes of major networking features and the trade-offs involved in choosing one solution over another. A large number of flowcharts and other diagrams enhance the book's understandability.
