Professional Linux ProgrammingISBN: 978-0-471-77613-0
Paperback
504 pages
March 2007
This title is out-of-print and not currently available for purchase from this site.
|
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