We wrote this book for experienced (or notsoexperienced, but
eagertolearn) 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 Unixonly 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 SLang
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.
- If you are a C programmer, but you know neither Unix nor Linux,
reading this book covertocover and working with the examples should
put you well on the road to being a competent Linux programmer.
With the aid of other, systemspecific 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 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 Unixlike 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 Cother 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.
- The first part introduces you to Linuxthe operating system,
license terms, documentation, and milieu.
- The second part covers the most important facets of the
development environmentthe compilers, linker and loader, and some
debugging tools that are not widely used on other platforms.
- The third part is the heart of the bookit 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 Linuxspecific; most of this
section covers general Unix programming from a Linux
perspective.
- The fourth part rounds out your knowledgeit includes
descriptions of some important libraries that provide interfaces
that are more independent of the kernel. These libraries are,
properly speaking, not Linuxspecific, but several are used more
often on Linux systems than on other systems.
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.
- 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
knowledgeable colleague.''
- Practical C Programming Oualline, 1993 teaches C
programming and style in a stepbystep, easytofollow manner that is
designed for people with no prior programming experience.
- 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 Unixlike 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.
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 ftp://ftp.awl.com/cseng/books/lad/src/.
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
Linuxrelated topics), the great majority of which was included with
your system.
We welcome your comments sent to ladcomments@awl.com 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 ftp://ftp.awl.com/cseng/books/lad/errata/.
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.
0201308215P04062001