Michael K. Johnson
Erik W. Troan


ISBN: 0-201-30821-5

We wrote this book for experienced (or not-so-experienced, but eager-to-learn) programmers who want to develop Linux software or to port software from other platforms to Linux. This is the book we wish we had when we were learning to program for Linux, and the book we now keep on our desks for reference. By the time we wrote our first three chapters, we were already using the drafts as reference material while we worked.

Linux is designed to be similar to Unix. This book gives you a good background in Unix programming basics and style. Linux is not fundamentally different from Unix--only different enough to repeatedly trip up a programmer who relies only on a Unix programming reference that ignores Linux. This book, therefore, is very much a Unix programming guide that is written from a Linux viewpoint.

Linux also has unique extensions, such as its direct screen access capabilities (see Chapter 20), and it has features that are used more often on it than on other systems, such as the S-Lang library (see Chapter 22). This book covers many of those extensions and features so that you can write programs that truly take advantage of Linux.

This book is different from usual Unix programming texts because it is unabashedly specific to a particular operating system. We have no need to confuse newcomers by saying BSD does this this way, SVR4 does it another, HPUX has its own way of handling it, and SGI also has its way. We'll cover each of these and let you sort it all out. We know from our own experience that once you learn how to program well for any Unix-like system, the others are easy to learn.

This book does not cover all the details of Linux programming. For example, it does not cover programming the X Window System, because such programming is the same on any Linux or Unix platform. Similarly, it does not explain the basic interface specified by ANSI C--other books do that quite well. Without extraordinary verbosity, we cover the information you need to know to go from being a C programmer for another system, such as DOS, Windows, or Macintosh, to being a C programmer for Linux. We do not cover the wealth of other programming languages available for Linux, and we do not cover the graphical programming libraries that are identical no matter what supported system you are using. Instead, we point you to books that specialize in those areas.

Linux Application Development is written in four parts.

If you are already familiar with Linux or Unix programming, you will be able to read the chapters in this book in any order. Do not feel compelled to read chapters that do not interest you. If you are not familiar with either Linux or Unix, most of the chapters will stand alone, but you will probably want to read Chapters 1, 2, 4, 5, 8, 9, 10, and 11 first, as they will give you most of what you need to know to read the other chapters. In particular, Chapters 9, 10, and 11 form the core of the Unix and Linux programming model.

The following books, although they may overlap a little here and there, mostly complement this book by being simpler, more advanced, or on related topics.

See the bibliography on page 513 or at biblio.html for an extensive list of related titles.

All the source code in this book comes from working examples that we have tested while writing. All of the source code in this book is available in electronic format at src/ and In the interest of clarity, some short source code segments check only for likely errors that document how the system works rather than check for all possible errors. However, in the full programs in the book and on our Web and FTP sites, we have made an attempt (we are not perfect) to check for all reasonable errors.

This book will teach you which functions to use and how they fit together; we encourage you to learn also how to use the reference documentation (Chapter 3 discusses how to find information on Linux-related topics), the great majority of which was included with your system.

We welcome your comments sent to We will read your comments, although we cannot promise to respond to them individually.

Linux is a rapidly developing operating system, and by the time you read this book, some facts (though we hope little substance) will no doubt have changed. We wrote this book in reference to Linux 2.0.30 and the C library version 5.3.12 as distributed with Red Hat Software's Red Hat Linux 4.2. We have also tested our example source code with the C library version 6 (glibc 2.0.5) as distributed with Red Hat Linux 5.0.

With your help, we will maintain a list of errata and changes on the World Wide Web at errata.html and via FTP at

We would like to thank each of our technical reviewers for their time and careful thought. Their suggestions have made this book stronger. Particular thanks go to Linus Torvalds, Alan Cox, and Ted Ts'o, who took time to answer our questions.

Special thanks go out to Kim Johnson and Brigid Nogueira. Without their undying patience this book simply would not have been written.

Copyright © 1998 by Addison Wesley Longman, Inc.