Programmation Système en C sous Linux - Maîtriser les Bases
À propos de ce cours
Des notions de programmation shell (système unix, linux) sont un prérecquis indispensable.
Le contenu du poly est le suivant :
- Processus, fork, exec (lancement d'un programme)
- Threads posix, mutex (parallelisme sur macines multi-pocesseur, etc...)
- Fichiers (exploration des répertoires et des fichiers, lecture écriture)
- Tubes (pipes), dialogue entre processus
- Signaux et leurs gestionnaires
- Programmation réseaux, Sockets TCP/IP (dilogue entre programmes via un réseau IP)
Programme du cours
Objectifs d'apprentissage
- Maîtriser les concepts fondamentaux de la programmation système sous Linux en langage C.
- Comprendre et manipuler les processus, y compris la création avec fork() et l'exécution de programmes avec exec().
- Implémenter des threads POSIX et utiliser les mutex pour gérer le parallélisme sur des machines multi-processeurs.
- Explorer et manipuler les systèmes de fichiers Linux (lecture, écriture, navigation dans les répertoires).
- Utiliser les tubes (pipes) pour la communication inter-processus.
- Gérer les signaux système et implémenter des gestionnaires de signaux efficaces.
- Développer des applications réseau basées sur les sockets TCP/IP pour la communication entre programmes distants.
Public cible
Ce cours s'adresse aux développeurs et étudiants en informatique ayant déjà une expérience de base en programmation C et une familiarité avec les systèmes Unix/Linux. Les participants doivent posséder des notions de programmation shell et comprendre l'environnement de ligne de commande Linux. Ce cours est particulièrement adapté pour les professionnels souhaitant approfondir leurs compétences en développement système, les administrateurs système désirant automatiser des tâches complexes, ou les ingénieurs logiciel travaillant sur des applications embarquées ou hautes performances sous Linux.
Contenu détaillé
Le cours couvre en profondeur les aspects clés de la programmation système sous Linux :
- Processus : Vous apprendrez à créer et gérer des processus avec fork(), remplacer l'image d'un processus avec exec(), et comprendre le cycle de vie d'un processus sous Linux.
- Threads POSIX : Implémentation de threads pour le parallélisme, synchronisation avec mutex, et gestion des problèmes de concurrence.
- Système de fichiers : Manipulation avancée des fichiers et répertoires, y compris les opérations de lecture/écriture, la navigation dans l'arborescence, et l'utilisation des descripteurs de fichiers.
- Communication inter-processus : Mise en œuvre de tubes (pipes) nommés et anonymes pour échanger des données entre processus.
- Gestion des signaux : Mécanismes des signaux Unix, écriture de gestionnaires de signaux robustes, et techniques pour éviter les conditions de course.
- Programmation réseau : Développement d'applications client-serveur avec les sockets TCP/IP, gestion des connexions réseau, et protocoles de communication de base.
Approche pédagogique
La formation combine théorie et pratique avec des exercices progressifs. Chaque concept est illustré par des exemples concrets et des projets pratiques comme la création d'un shell simplifié ou d'un serveur réseau écho. Les participants travailleront directement sur des systèmes Linux, utilisant des outils comme gcc, gdb, et valgrind pour le débogage et l'analyse des performances.
Prérequis techniques
Les participants doivent avoir :
- Une machine Linux (ou un accès à un environnement Linux via VM/WSL)
- Compilateur gcc installé
- Connaissance de base du terminal Linux (bash)
- Expérience préalable en programmation C (pointeurs, structures, gestion mémoire)