"Advanced Programming in the UNIX Environment" by Richard Stevens (2nd Edition updated by Stephen Rago in 2005) has been THE standard for UNIX system programming since the first edition came out in 1992. It is clear, correct and comprehensive. Another really excellent book is the updated edition of Marc Rochkind's "Advanced UNIX Programming." So it is unexpected that a new UNIX system programming book should come out that stands head and shoulders above the Stevens and Rochkind books, but Michael Kerrisk's "The Linux Programming Interface" does.
Kerrisk's book is more thorough, more comprehensive and just as well written as the Stevens and Rochkind books. It covers over 500 system calls in the SUSv3 and SUSv4 specification in 64 chapters, using 200 example programs, 88 tables, 115 diagrams and 1506 pages. It's a monumental work, and it's really very good. It is now easily THE standard book on Linux/UNIX system programming.
No work, no matter how good, is perfect, and I do have two small niggles, neither of which detract from its 5 star rating. (1) Some chapters have only one exercise. I wish there had been more. But, on the plus side, most chapters have at least one solution to an exercise. And, (2) the only treatment of debugging is a two page appendix on strace(1). I would have like to have had some discussion on the use of systemtap, gdb and other tools in debugging programs that use system calls.
All in all, an outstandingly good book and unreservedly recommended.