L’objectif du cours est double : initier aux savoir-faire fondamentaux pour utiliser et manipuler un système UNIX/LINUX et découvrir puis compléter ses connaissances en Langage C pour réaliser des développements conséquents pour aborder sereinement tous les autres langages inspirés du C (C++/Java/C#, …).
Pour prendre de bonnes habitudes en développement, la découverte d’outils est imposée (débogeur, profileur, git, tests unitaires). Le cours présente également les consignes de développement sécurisé en C présentées par l’ANSSI.
Plan du cours
Préambule : introduction à un ordinateur / serveur /système d’exploitation
Introduction à l’UNIX
Organisation des données : fichiers et répertoires
Sécurité : connexion et mot de passe
Processus (ps, kill, jobs)
Réseau et internet (mail, ssh, sftp)
Scripts shell simples
Introduction au développement Web
Introduction au langage C
Syntaxe, conditions, boucles
Variable et portée
Tableaux, chaînes de caractères
Fonctions, récursivité
Fichiers textes
Approfondissement en C
Les pointeurs et la gestion dynamique de la mémoire
Les macro-instructions
Les structures simples, auto-référentielles, énumérations et unions
Les fonctions à nombre d’arguments variables
Les pointeurs de fonction, les tableaux de pointeurs de fonction
Passage de fonction en paramètre à d’autres fonctions
Fichiers binaires (directs et séquentiels)
Interface entre C et Unix (Ligne de commande et retour système et processus)
Gestion du graphisme avec la bibliothèque SDL 2.
Outils et techniques de développement
Compilation séparée et makefile simple
Gestionnaire de version GIT (utilisation locale) et GITLAB
Tests unitaires
Débogueur (gdb/ddd), profileur et analyse d’exécution (valgrind)
Bonnes pratiques de développement : commentaires, guide de style et guide de l’ANSSI
Description des TP
4 TP d’UNIX, 1 TP de web, 4+11 TPs de C.
Pour inciter aux tests et à la validation, quelques petits jeux sont proposés.
Connaissances requises
Notions d'algorithmique
RSE (Responsabilité Sociale et Environnementale)
Bibliographie
Brian W. KERNIGHAN, Dennis M. RITCHIE, Le Langage C, Dunod, 2004
Jean-Marie RIFFLET, La programmation sous UNIX, Ediscience, 2003
Règles de développement sécurisé en C v1.1,ANSSI, 2020