For the last, hmm, 6 months I\'ve been reading into Programming in C, I got myself K&Rv2, BEEJ\'s socket guide, Expert C programming, Linux Systems Programming, the ISO/IEC
I find practicing much more useful at learning concepts than reading about them. Often what I'll do is determine a problem I want to solve with software, then go about it by attempting the problem. I will utilize resources along the way, but its really more useful to try what you read, rather than read every book on the subject.
Also, Code Golf is a good way to find fun programs to attempt.