Wiley.com
Print this page Share

Professional Linux Programming

ISBN: 978-0-471-77613-0
Paperback
504 pages
March 2007
Professional Linux Programming (0471776130) cover image
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

Related Titles

More By These Authors

General Programming & Software Development

by Stef Maruch, Aahz Maruch
by John Kauffman, Bradley Millington
by Steve Holzner
Back to Top