The Linux Programming Interface
A Linux and UNIX System Programming Handbook
by Michael Kerrisk, published by No Starch Press (an imprint of O’Reilly Media)
As someone with several degrees in computer science, I’ve used Linux quite a bit; it’s my preferred environment for doing C++ programming. However, I’ve never formally studied the operating system; rather, I’ve just picked up enough to get by. As such, I was very interested to pick up a copy of O’Reilly’s new book on Linux programming and remedy that deficit in my education!
My original intent was to just spend a few weeks reading through the entire book; that delusion lasted approximately fifteen minutes. This is a big, heavy book – as in, potential murder weapon heavy. As should be clear from the title, it’s not about using Linux, it’s about programming with Linux, and expects a minimal level of programming competence from the reader. I had originally intended to review the book last year, but there’s quite a lot of reading involved!
The book starts out with an introduction to the history (including the standardization process) of UNIX and C; it then has one chapter each on fundamental concepts and system programming concepts. This is followed by information on files (there are, in fact, six chapters on file I/O, attributes, and events), processes, memory allocation, users and groups, security (including process credentials and access control lists), threads, sockets, etc; in all, there are 64 chapters covering 1400 pages, plus a half-dozen appendixes. The book covers over 500 system calls and library functions, and includes over 200 sample programs.
Reading through the book, it appears to be well-edited; free from obvious technical and typographic errors. This being a Linux/UNIX book, all of the sample code is naturally written in C, rather than trying to show multiple versions in “hot” languages, as many books these days tend to do. The author has been in charge of maintaining the man pages for Linux since 2004, and his familiarity with the system shines through; fortunately, he also happens to be a good writer, and rather than just telling you what a particular system call does, he first explains why something is useful and when you might want to use it.
Lately I’ve been in the process of slimming down my personal library, but this book has earned a prominent place on my computer shelf.
Disclosure: I received a free review copy of this book.