Many people like this book. It seems to be at just the right level for a second-year introduction to the C programming language. I've spent a lot of time with the first edition of the book and have not noticed any technical errors, which I think makes it unique for a book about C not written by a unix or C insider. (I haven't read all of the second edition.)
I think that this is my preferred book for the system-programming part of CSC 209. It's got most of what we're covering in that regard and it seems to be clear, and as far as I can recall I think I've only noticed one substantial error in it so far.
This book is definitely not gentle or fluffy. But it still has an introductory or tutorial structure. It is targetted at people with a good understanding of computer programming in general, but no knowledge of C or unix.(The second edition covers material added to the C programming language in the 1989 ANSI C standard (also published as ISO C 1990), but not material added to the C programming language in the more recent 1999 ISO C standard. This might not matter to you at all; at least I think it doesn't matter very much or very immediately. However, the first edition doesn't include the 1989 ANSI C revisions, some of which were substantial. I don't think you'll want to use the first edition.)
This book focuses primarily on programming in C, but also has assorted examples from Java and other programming languages where those languages can illustrate particular points better. The book discusses software tools. It's not entirely 209-relevant but it's a very good addition to yer bookshelf.Chapter 1 on "style" issues is quite relevant to this course. It also includes some material on commenting you might find useful.
In some ways this book resembles an update of Kernighan and Plaugher's The Elements of Programming Style. (Which I think is too bad, because now I know that Kernighan will never do an actual update of The Elements of Programming Style, which I think is an amazing book but unfortunately completely inaccessible to almost all of you because it is so heavy on the details of some very old programming languages, thus could really use a modern third edition...)
This book has chapters about shell programming, unix system programming, the C programming language, troff/nroff, and the data-processing unix tools (sort/join/comm/uniq/etc). Amazingly, he somehow manages to cover almost all you need to know as an introduction to each of these topics. It is not written as a textbook, and you will find it rather intense (obviously, given the scope of its coverage). Yes, this is the "Bourne" as in "the Bourne shell".
In-depth information on a variety of unix system programming topics. The most-cited reference for tricky TCP / socket programming matters. Well beyond the scope of this course, but I think it's still worth a mention in this textbook list. If in the future you're looking for a more in-depth book about various unix system programming topics, you should consider the Stevens book.
This book does have some redeeming features, but when we used this as a 209 textbook we knew we were still looking. Contains more examples than Haviland et al (which is why I list it here); contains more errors than Haviland et al.
We're getting farther away from CSC 209 matters here, but this is a really neat book which attempts to teach a large swath of a basic first- and second-year curriculum, entirely from the bottom up. Thus it starts with CSC 258ish material, and then uses the computer which is developed in the first bit to show how the C programming language could be implemented, and teaches C, and some first-year programming concepts such as recursion.This is not a very 209-relevant book, but actually it doesn't fit any course in our curriculum because it's based on a rather different curriculum structure (and the book's use at the authors' university involved a curriculum restructuring). You might find this book particularly helpful in understanding an OS-implementation lecture near the end dealing with interrupts, but that's just a tiny note in CSC 209. You also might find this book interesting in its discussion of how C relates to the low-level machine, to the extent that this isn't obvious after completing CSC 258 plus doing C in CSC 209.