Michael K. Johnson
Erik W. Troan
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.
- If you are a C programmer, but you know neither Unix nor Linux,
reading this book cover-to-cover
and working with the examples should put you well on the road to being
a competent Linux programmer. With the aid of other, system-specific
documentation, you should find the transition to any version of Unix easy.
- If you are already a proficient Unix programmer, you will find
that this book makes your transition to Linux easier. We have tried
very hard to make it easy for you to find precisely the information you
need to know. We also carefully and clearly cover topics that
sometimes trip up even experienced Unix programmers, such as process
and session groups, job control, and tty handling.
- If you are already a Linux programmer, this book covers
confusing topics clearly and will make many of your programming tasks easier.
Nearly every chapter will stand alone for you, because you already possess the
minimal knowledge of Linux on which they are based. No matter how
experienced you are, you will find material here that you will
appreciate having at your elbow.
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
- The first part introduces you to Linux--the operating system,
license terms, documentation, and milieu.
- The second part covers the most important facets of the development
environment--the compilers, linker and loader, and some debugging tools
that are not widely used on other platforms.
- The third part is the heart of the book--it describes the
interface to the kernel and to the system libraries, which are primarily meant
as an interface to the kernel. Only the final three chapters of this
section are very Linux-specific; most of this section
covers general Unix programming from a Linux perspective.
- The fourth part rounds out your knowledge--it includes
descriptions of some important libraries that provide interfaces that
are more independent of the kernel. These libraries are, properly
speaking, not Linux-specific, but several are used more often on
Linux systems than on other systems.
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.
- The C Programming Language, second edition [Kernighan, 1998]
concisely teaches ANSI standard C programming, with scant
reference to the operating system. It recommends that readers
have either some programming knowledge or ``access to a more
- Practical C Programming [Oualline, 1993]
teaches C programming and style in a step-by-step, easy-to-follow
manner that is designed for people with no prior programming
- Programming with GNU Software [Loukides, 1997]
is an introduction to the GNU programming environment, including
chapters on running the C compiler, the debugger, the make utility,
and the RCS source code control system.
- Advanced Programming in the UNIX Environment [Stevens, 1992]
covers most important Unix and Unix-like systems, although it predates Linux.
It covers similar material to the final two parts of Linux Application
Development: system calls and shared libraries. It also provides many examples
and explains the difference between various Unix versions.
- UNIX Network Programming [Stevens, 1990]
thoroughly covers network programming, including
legacy types of networking that are not available on Linux, at
least as we write this. While reading this book, stick to the
Berkeley socket interface (see Chapter 16) to maintain
maximum portability. This book may be useful if you need to
make a few slight changes to port your Linux network program to
some brand of Unix.
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
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 firstname.lastname@example.org
We will read your comments, although we cannot promise to respond to them
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
and via FTP
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.