Rights Contact Login For More Details
- Wiley
More About This Title Professional Linux Programming
- English
English
- English
English
When not working on Enterprise Linux software for Red Hat, Jon likes to drink tea on Boston Common and read the collective works of Thomas Paine and other great American Revolutionaries of a bygone age. He dreams of a time when the world was driven not by electrons, but by wooden sailing ships and a universal struggle for the birth of modern nations. He plays the violin, and occasionally sings in choral ensembles, for which he has won several awards. For relaxation, Jon enjoys engaging in a little rock climbing. He lives in Cambridge, Massachusetts, just across the river Charles from historic Boston, and enjoys every minute of it.
Jon has extensive experience in speaking about and training people to use a wide variety of Linux technologies and enjoys actively participating in many Linux User Groups the world over.
Richard Blum has worked for over 18 years for a large U.S. government organization as a network and systems administrator. During this time he has had plenty of opportunities to work with Microsoft, Novell, and of course, UNIX and Linux servers. He has written applications and utilities using C, C++, Java, C#, Visual Basic, and shell script.
Rich has a Bachelors of Science degree in Electrical Engineering, and a Masters of Science degree in Management, specializing in Management Information Systems, from Purdue University. He is the author of several books, including “sendmail for Linux” (2000, Sams publishing), “Running qmail” (2000, Sams publishing), “Postfix” (2001, Sams Publishing), “Open Source E-mail Security” (2001, Sams Publishing), “C# Network Programming” (2002, Sybex), “Network Performance Open Source Toolkit” (2003, John Wiley & Sons), and “Professional Assembly Language Programming” (2005, Wrox).
- English
English
Acknowledgments ix
Introduction xix
Chapter 1: Working with Linux 1
A Brief History of Linux 2
The GNU Project 2
The Linux Kernel 3
Linux Distributions 4
Free Software vs. Open Source 4
Beginning Development 5
Choosing a Linux Distribution 6
Installing a Linux Distribution 8
Linux Community 15
Linux User Groups 15
Mailing lists 16
IRC 16
Private Communities 16
Key Differences 16
Linux Is Modular 17
Linux Is Portable 17
Linux Is Generic 17
Summary 18
Chapter 2: Toolchains 19
The Linux Development Process 19
Working with Sources 20
Configuring to the Local Environment 21
Building the Sources 22
Components of the GNU Toolchain 23
The GNU Compiler Collection 23
The GNU binutils 34
GNU Make 39
The GNU Debugger 40
The Linux Kernel and the GNU Toolchain 44
Inline Assembly 44
Attribute Tags 45
Custom Linker Scripts 45
Cross-Compilation 46
Building the GNU Toolchain 47
Summary 48
Chapter 3: Portability 49
The Need for Portability 50
The Portability of Linux 51
Layers of Abstraction 51
Linux Distributions 52
Building Packages 57
Portable Source Code 70
Internationalization 81
Hardware Portability 88
64-Bit Cleanliness 89
Endian Neutrality 89
Summary 92
Chapter 4: Software Configuration Management 93
The Need for SCM 94
Centralized vs. Decentralized Development 95
Centralized Tools 95
The Concurrent Version System 96
Subversion 104
Decentralized tools 108
Bazaar-NG 109
Linux kernel SCM (git) 112
Integrated SCM Tools 115
Eclipse 115
Summary 117
Chapter 5: Network Programming 119
Linux Socket Programming 119
Sockets 120
Network Addresses 122
Using Connection-Oriented Sockets 123
Using Connectionless Sockets 130
Moving Data 133
Datagrams vs. Streams 133
Marking Message Boundaries 137
Using Network Programming Libraries 140
The libCurl Library 140
Using the libCurl Library 141
Summary 147
Chapter 6: Databases 149
Persistent Data Storage 149
Using a Standard File 150
Using a Database 150
The Berkeley DB Package 152
Downloading and Installing 153
Building Programs 154
Basic Data Handling 154
The PostgreSQL Database Server 165
Downloading and Installing 165
Building Programs 167
Creating an Application Database 167
Connecting to the Server 169
Executing SQL Commands 173
Using Parameters 181
Summary 184
Chapter 7: Kernel Development 185
Starting Out 185
Kernel Concepts 199
A Word of Warning 200
The Task Abstraction 200
Virtual Memory 205
Don’t Panic! 208
Kernel Hacking 208
Loadable Modules 209
Kernel Development Process 211
Git: the “Stupid Content Tracker” 212
The Linux Kernel Mailing List 213
The “mm” Development Tree 215
The Stable Kernel Team 215
LWN: Linux Weekly News 216
Summary 216
Chapter 8: Kernel Interfaces 217
What Is an Interface? 217
Undefined Interfaces 218
External Kernel Interfaces 219
System Calls 219
The Device File Abstraction 224
Kernel Events 238
Ignoring Kernel Protections 239
Internal Kernel Interfaces 243
The Kernel API 243
The kernel ABI 244
Summary 245
Chapter 9: Linux Kernel Modules 247
How Modules Work 247
Extending the Kernel Namespace 250
No Guaranteed Module Compatibility 251
Finding Good Documentation 251
Linux Kernel Man Pages 251
Writing Linux Kernel Modules 252
Before You Begin 253
Essential Module Requirements 253
Logging 256
Exported Symbols 257
Allocating Memory 259
Locking considerations 267
Deferring work 275
Further Reading 283
Distributing Linux Kernel Modules 284
Going Upstream 284
Shipping Sources 284
Shipping Prebuilt Modules 284
Summary 285
Chapter 10: Debugging 287
Debugging Overview 287
A Word about Memory Management 288
Essential Debugging Tools 289
The GNU Debugger 289
Valgrind 298
Graphical Debugging Tools 299
DDD 299
Eclipse 302
Kernel Debugging 305
Don’t Panic! 306
Making Sense of an oops 307
Using UML for Debugging 309
An Anecdotal Word 312
A Note about In-Kernel Debuggers 313
Summary 313
Chapter 11: The GNOME Developer Platform 315
GNOME Libraries 316
Glib 316
GObject 316
Cairo 316
GDK 317
Pango 317
GTK+ 317
libglade 318
GConf 318
GStreamer 318
Building a Music Player 319
Requirements 319
Getting Started: The Main Window 319
Building the GUI 321
Summary 340
Chapter 12: The FreeDesktop Project 341
D-BUS: The Desktop Bus 341
What Is D-Bus? 342
Under D-Hood of D-Bus 342
D-Bus Methods 346
Hardware Abstraction Layer 350
Making Hardware Just Work 350
Hal Device Objects 353
The Network Manager 358
Other Freedesktop Projects 360
Summary 360
Chapter 13: Graphics and Audio 361
Linux and Graphics 361
X Windows 362
Open Graphics Library 364
OpenGL Utilities Toolkit 365
Simple Directmedia Layer 365
Writing OpenGL Applications 365
Downloading and Installing 366
Programming Environment 367
Using the GLUT Library 368
Writing SDL Applications 382
Downloading and Installing 382
Programming Environment 383
Using the SDL Library 383
Summary 394
Chapter 14: LAMP 395
What Is LAMP? 395
Apache 396
MySQL 396
PHP 397
The Rebel Platform 397
Evaluating the LAMP Platform 397
Apache 399
Virtual Hosting 400
Installation and Configuration of PHP 5 401
Apache Basic Authentication 402
Apache and SSL 402
Integrating SSL with HTTP Authentication 403
MySQL 404
Installing MySQL 404
Configuring and Starting the Database 404
Changing the Default Password 405
The MySQL Client Interface 405
Relational Databases 405
SQL 406
The Relational Model 409
PHP 411
The PHP Language 411
Error Handling 420
Error-Handling Exceptions 421
Optimization Techniques 422
Installing Additional PHP Software 427
Logging 427
Parameter Handling 428
Session Handling 429
Unit Testing 430
Databases and PHP 432
PHP Frameworks 432
The DVD Library 433
Version 1: The Developer’s Nightmare 433
Version 2: Basic Application with DB-Specific Data Layer 434
Version 3: Rewriting the Data Layer, Adding Logging and Exceptions 437
Version 4: Applying a Templating Framework 441
Summary 442
Index 443
GNU 473