There are two books that I have read when I began my programming career.
One is <Advanced Programming in the UNIX Environment> written by W. Richard Stevens. The other is <Linux Device Drivers, 2nd Edition> written by Alessandro Rubini and Jonathan Corbet
<Advanced Programming in the UNIX Environment> taught me lots of language features in C which I never knew before. Click HERE to download its source code. In addition, the author shared the book <Linux Device Drivers, 2nd Edition> free, Click HERE to download its PDF format version.