About The Linux Programming Interface

The Linux Programming Interface (TLPI) describes system programming on Linux and UNIX.

TLPI front cover
(complete cover here)

TLPI is both a guide and reference book for system programming:

  • If you are new to system programming, you can read TLPI linearly as an introductory guide: each chapter builds on concepts presented in earlier chapters, with forward references kept to a minimum. Most chapters conclude with a set of exercises intended to consolidate the reader's understanding of the topics covered in the chapter.
  • If you are an experienced system programmer, TLPI provides a comprehensive reference that you can consult for details of nearly the entire Linux and UNIX (i.e., POSIX) system programming interface. To support this use, the book is thoroughly cross referenced and has an extensive index.

TLPI provides more than just the technical details of the system programming interface: it gives important context describing why and how to use the interfaces, accompanied by a rich set of (complete) example programs.

In the book, I assume that reader has some prior programming experience, a reading knowledge of C, and understands how to use common Linux or UNIX commands. Previous experience of system programming is not required.

Here are some notable features of the book:

  • Broad and deep topic coverage: With over 1500 pages, 115 diagrams, 88 tables, over 200 exercises, and 15,000 lines of program source code and shell sessions demonstrating the use of the programs, TLPI is the most detailed single-volume description of Linux and UNIX system programming available. As well as the topics covered in many other system programming books, TLPI includes thorough coverage of multithreaded programming (5 chapters), sockets and network programming (6 chapters), shared libraries, secure programming, memory mappings, process scheduling, access control lists, and login accounting.
  • Extensive coverage of Linux-specific features: TLPI covers features such as epoll, inotify, capabilities (a mechanism for improving security in privileged programs), extended attributes (attaching arbitrary metadata to a file), i-node flags (formerly known as ext2 extended attributes), the clone() system call, the /proc file system, signalfd, and Linux-specific details of the implementation of file I/O, signals, threads, shared libraries, interprocess communication, and sockets.
  • A heavy emphasis on portability: You can use TLPI as a guide to system programming on any UNIX system (hence the subtitle, A Linux and UNIX System Programming Handbook). TLPI pays close attention to UNIX standards, in particular POSIX.1-2001/SUSv3 and POSIX.1-2008/SUSv4, clearly distinguishing features that are Linux-specific from those that are present on most or all UNIX systems. Consequently, you can use TLPI as a guide while writing programs that need to be portable to all UNIX systems.
  • The author: I'm an active member of the Linux community. I've worked on the Linux man-pages project since 2000, and have been the project maintainer since 2004. It's quite possible you've already read some of my published work, since I'm the author or coauthor of nearly a third of the 950+ pages in the man-pages project.

The programming examples in TLPI are in C, but the concepts are equally applicable in a wide range of other languages, both compiled languages such as C++, D, Pascal, and FORTRAN, and scripting languages such as Perl, Python, and Ruby.

For more detail about the book, see the preface.

TLPI has been very positively reviewed. You can find pointers to reviews here.

For information on ordering TLPI, look here.