Wiley
Wiley.com
Print this page Share

Professional Linux Programming

ISBN: 978-0-471-77613-0
465 pages
March 2007
Professional Linux Programming (0471776130) cover image
  • This book is broken into four primary sections addressing key topics that Linux programmers need to master: Linux nuts and bolts, the Linux kernel, the Linux desktop, and Linux for the Web
  • Effective examples help get readers up to speed with building software on a Linux-based system while using the tools and utilities that contribute to streamlining the software development process
  • Discusses using emulation and virtualization technologies for kernel development and application testing
  • Includes useful insights aimed at helping readers understand how their applications code fits in with the rest of the software stack
  • Examines cross-compilation, dynamic device insertion and removal, key Linux projects (such as Project Utopia), and the internationalization capabilities present in the GNOME desktop
See More

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

See More
Jon Masters is a 25-year-old British-born Linux kernel engineer, embedded systems specialist, and author who lives and works in the United States for Red Hat. Jon made UK history by becoming one of the youngest University students the country had ever seen, at the tender age of just 13. Having been through college twice by the time his peers were completing their first time around, and having been published over 100 times in a wide range of technical magazines, journals and books, Jon went on to work for a variety of multinational technology companies. He has worked extensively in the field of Embedded Systems, Enterprise Linux and Scientific instrumentation and has helped design anything and everything from Set Top Boxes to future NMR (MRI) imaging platforms.
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).

See More
Download TitleSizeDownload
Code samples from the book
Code samples from the book (This download contains code from Chapters 2, 3, 5, 6, 8, 9, 11, 13, and 14)
541.74 KB Click to Download
code download for chapter 12
balance of code samples for the book
2.96 KB Click to Download
See More

Do you think you've discovered an error in this book? Please check the list of errata below to see if we've already addressed the error. If not, please submit the error via our Errata Form. We will attempt to verify your error; if you're right, we will post a correction below.

ChapterPageDetailsDatePrint Run
347 Error in Code
dbus_message_get_args (dbreply, &dberr, DBUS_TYPE_INT32, &result);

should be:
dbus_message_get_args (dbreply, &dberr, DBUS_TYPE_INT32, &result, DBUS_TYPE_INVALID);

For further reference please see this page from the DBUS manual:
http://dbus.freedesktop.org/doc/api/html/group__DBusMessage.html#gad8953f53ceea7de81cde792e3edd0230
10/21/11
See More
Back to Top