Great post!
Univiersites tend to teach a very small subset of C, just enough to make a tic tac toe application or something silly.
I learned C by myself many years ago but it's only until recent I have been using it for big projects.
Reading Redis' source code was a great aide, xv6 is also amazing to learn systems programming.
Learn C The Hard Way is also a good read, but not as your main book, since it goes too fast.
Other invaluable resources are: Beej's Guide to Network Programming and Beej's Guide to Unix Interprocess Communication
A good advanced book is Advanced Programming in the Unix Environment
I loved "Expert C Programming: Deep C Secrets" by Peter Van der Linden. Great deep dive on the minutiae of important details (the difference between arrays and pointers as function arguments, etc)
I do agree, that book is really great, both very in-depth and at the same time entertaining to read.
Unfortunately, it appears to have been out of print for a while now.
Another book I can highly recommend is "The New C Standard: A Cultural and Economic Commentary" (http://www.knosof.co.uk/cbook/cbook.html). It takes apart the C language standard (C99) pretty much sentence by sentence, explains what it means and also contrasts how C99 is similar to or different from other languages (C++ mostly, but also, say, Fortran or Pascal).
+1 for Beej. I barely knew C when I enrolled in network programming, so trying to fill my C gaps alongside learning network programming was challenging. Someone recommended Beej. Then it was just a matter of C.
I learned C by myself many years ago but it's only until recent I have been using it for big projects.
Reading Redis' source code was a great aide, xv6 is also amazing to learn systems programming.
Learn C The Hard Way is also a good read, but not as your main book, since it goes too fast. Other invaluable resources are: Beej's Guide to Network Programming and Beej's Guide to Unix Interprocess Communication
A good advanced book is Advanced Programming in the Unix Environment