Paperback: 456 pages
Publisher: O'Reilly Media; 2 edition (June 8, 2013)
Product Dimensions: 7 x 1.1 x 9.2 inches
Shipping Weight: 1.8 pounds (View shipping rates and policies)
Average Customer Review: 4.2 out of 5 stars See all reviews (16 customer reviews)
Best Sellers Rank: #133,986 in Books (See Top 100 in Books) #41 in Books > Computers & Technology > Operating Systems > Linux > Programming #52 in Books > Computers & Technology > Operating Systems > Unix #164 in Books > Textbooks > Computer Science > Operating Systems
Huge caveat: this book is about application programming, not internal system (kernel) development. Coming from a Windows background I bought this book thinking it would be about writing programs for the system memory space, ie drivers and kernel modifications. That is not the case. In the Linux world "system programming" means anything that makes kernel calls, i.e., uses the system interface, whereas "application programming" is writing scripts. This definition completely differs from that in the Windows/Intel world where "system programming" means writing software that operates at privilege level 0 of the CPU, i.e., anything in the system memory space (usually drivers and various OS components). So, if you are coming from a non-Linux environment be aware of that. For example, the author considers a writing "text editor" to be system programming, whereas in Windows and the MacOS text editors are considered applications and writing them is considered application programming.This book covers all the basic calls in an introductory way. For example, the first chapter with meat in it, Chapter 2, covers "File I/O" and gives beginner level descriptions of calls like read(), seek() and select(). The main advantage of the book is that is pretty thorough in coverage, giving basic descriptions of every major system interface.Overall the book is decent, but is completely outmatched by other similar, much better books. For example, "The Linux Programming Interface" by Kerrisk has everything in this book plus a lot more and much better examples. In particular a big failing of this book is that is has no realistic examples, just toy snippets.
I received a review copy of the book as part of the blogger review program.Summary:This book consists of 11 chapters. The first chapter introduces you nicely to the the core topics and lays the foundation for the rest of the book. Files (including some hints on the role of the virtual file system and how they are represented in the Kernel), Input/Output (User buffered I/O, I/O scheduling, Scatter-Gather I/O), Processes (including their creation mechanisms and management), Threads (and how Linux implements them along with a treatment of the POSIX threads library), Memory (Process address space, dynamic memory allocation strategies, and how they work, memory locking) form the core of the book. The second last chapter discusses signal handling. The last chapter of the book is on time (the different types of time, how you can get/set time, measure time elapsed and timers) and is sort of a “standalone” topic for the book. The first appendix discusses the GCC extensions to the C language and can be handy when you read the Kernel source code.Reactions:In this book, the author discusses some of the most important topics that one would want to learn about when venturing into the area of “system programming” on Linux. He introduces the topics in a friendly manner adding some fun anecdotes from time to time (what does the “c” in calloc() stand for?).At various places, the reader is given a peek under the hood (for example, pause() is one of the simplest system calls implemented) which can only make the curious reader happy and itchy to download the kernel source code and start grepping. The book includes code examples throughout and hence if you are learning a topic for the first time, these are very useful starting points.