Ressources

Documentation/Spécification

Quand vous cherchez des informations sur une fonction ou d’autres éléments du langage :

  • cppreference 🇬🇧, par exemple pour la fonction printf ;

  • The Open Group 🇬🇧, le consortium qui développe les standards POSIX (entre autres). Vous pourrez trouver sur le site la liste des en-têtes (headers, en bas de page), qui peut éventuellement vous aider à retrouver des fonctions ;

  • le manuel de référence de GNU 🇬🇧 ;

  • dans le terminal : man num_section nom_fonction (voir man man pour la liste des sections). Pour les éléments de C, voir dans la section 3, man 3 printf. Pour les fonctions système, voir dans la section 2, man 2 fork (les sections 1, 2 et 3 sont aussi présentées dans l”introduction) ;

  • dans le terminal : whatis printf (ou man -f printf) liste les sections où existe une page printf ; apropos printf cherche le mot-clé dans les noms et descriptions de toutes les pages ;

  • le man en ligne 🇬🇧 (man7.org), avec des liens cliquables entre les pages.

Cours/livres sur le C

Si vous voulez améliorer vos connaissances en C, un livre incontournable est « The C Programming Language 2nd edition » 🇬🇧 de Brian Kernighan et Dennis Ritchie. Il présente le C de la norme ANSI (C89). Le langage a évolué depuis (commentaires avec //, déclarations plus flexibles, etc.) et certains exemples demandent quelques modifications, mais le livre reste un très bon point de départ. Un second livre, plus difficile à aborder en premier, est « Modern C » 🇬🇧 de Jens Gustedt. Le livre complet est en accès libre avec le code source.

Si vous souhaitez suivre un cours avec des vidéos, le cours CS50 d’Harvard 🇬🇧 présente une introduction à l’informatique sur 11 semaines (numérotées de 0 à 10). Dans le cadre de ce cours, vous pouvez suivre jusqu’à la semaine 4 et regarder la partie sur les struct de la semaine 5.

Pour mieux comprendre les tableaux et pointeurs, il existe un tutoriel 🇬🇧 écrit par Ted Jensen et maintenu par Jay Flaherty.

Vous pourrez aussi trouver des cours en français sur Zeste de Savoir 🇫🇷 ou OpenClassrooms 🇫🇷.

La chaîne Low Level 🇬🇧 peut vous aider à comprendre le C et l’assembleur, avec une partie consacrée à la sécurité.

Cours/livres sur les aspects système

Pour les aspects système, nous ne verrons pas tout dans ce cours ; si vous voulez aller plus loin, vous pouvez lire « Développement système sous Linux, 5e édition » 🇫🇷 de Christophe Blaess (accessible en ligne avec la BU).

Pour la programmation réseau, le Beej’s Guide to Network Programming 🇬🇧 (gratuit, en ligne) présente les sockets pas à pas. Pour tout l’aspect système (processus, signaux, threads, sockets), The Linux Programming Interface 🇬🇧 de Michael Kerrisk (l’auteur des pages man7.org) est une référence très complète.

Le site wiki.osdev.org 🇬🇧 pourra vous donner des ressources et mots-clés pour la partie système.

Si vous voulez mieux comprendre le fonctionnement de l’ordinateur, plus proche de l’électronique, vous pouvez regarder la vidéo « Exploring How Computers Work » 🇬🇧 de Sebastian Lague.

Pour aller un peu plus loin, la playlist « Computer Science » 🇬🇧 de Crash Course part de la base historique de l’informatique et des portes logiques et va jusqu’à des sujets comme la robotique, la cryptographie, l’apprentissage automatique, etc.