Quais são os bons recursos para aprender C?
Programa em C, por mais assustador que seja. A melhor maneira de se forçar a programar em C é rodar Linux ou BSD no seu desktop: em algum momento, você'será praticamente forçado a compilar pacotes e ajustá-los para fazê-los funcionar. Você'será forçado a usar gdb, strace etc... You'aprenderá a trabalhar com make/auto-tools (convenientemente, só essa habilidade significa que você pode conseguir um trabalho de "carregar água" na maioria das empresas de tecnologia que usam C ou C++ em um ambiente UNIX). Escreva aplicações, contribua para projetos de código aberto.O mais importante a ter em mente não é ler estes livros, mas trabalhar através deles.
1. O livro K&R é um livro obrigatório. Trabalhe através dele.
2. O C Primer Plus é um bom complemento ao livro K&R.
3. Uma vez que você conhece a língua, você precisa aprender como resolver problemas com ela. É imperativo entender como implementar e usar as estruturas e algoritmos de dados chave. Para isso os livros chaves são:
"Interfaces e Implementações em C", http://sites.google.com/site/cinterfacesimplementations/ (um dos meus livros de programação favoritos de todos os tempos)
"Mastering Algorithms with C", http://oreilly.com/catalog/9781565924536
"Datastructures: a pseudo-abordagem de código usando C", http://www.amazon.com/Data-Structures-Pseudocode-Approach-C/dp/0534390803/ (outro grande livro, aprendi com ele. Prontamente disponível usado)
4. Se você'está interessado em contribuir com projetos open source não triviais ou trabalhar em tempo integral em C, trabalhe através de Richard Stevens' Programação Avançada em Ambiente UNIX e Programação em Rede UNIX. Esta informação também será altamente útil se você optar por fazer programação de rede ou IPC em linguagens de nível superior, como o modelo de programação BSD Socket e SysV IPC/shm são (respectivamente) os padrões de ouro em seus domínios individuais.