Consignes¶
Pour la 1re séance¶
Les commandes suivantes installent les extensions VSCode puis créent le répertoire de travail. Lancez-les depuis un terminal, dans votre dossier personnel (ou le dossier de votre choix) :
# installation des extensions pour le C et clang-format
code --install-extension ms-vscode.cpptools-extension-pack
code --install-extension xaver.clang-format
mkdir r3_05_programmation_systeme
cd r3_05_programmation_systeme
# clang-format indentera automatiquement votre code
wget https://members.loria.fr/cyril.grelier/r3_05/files/.clang-format
mkdir .vscode
# fichier de paramètres pour VSCode
wget https://members.loria.fr/cyril.grelier/r3_05/files/settings.json -P .vscode/
mkdir p1
wget https://members.loria.fr/cyril.grelier/r3_05/files/p1e1.c -P p1/
code .
Une fois dans VSCode :
ouvrez le fichier
p1/p1e1.c;faites le raccourci
Ctrl+Shift+I(ou ouvrez la palette avecCtrl+Shift+Ppuis écrivezFormat Document) ;si VSCode vous demande de choisir un formateur, choisissez
clang-format.
Maintenant, quand vous enregistrez le fichier, l’indentation sera corrigée automatiquement.
Arborescence attendue (un sous-dossier par partie) :
r3_05_programmation_systeme/ <- VSCode doit être ouvert depuis ce dossier
├── .vscode/
│ └── settings.json
├── p1/
│ ├── p1e1.c
│ ├── p1e2.c
│ └── ...
├── p2/
│ ├── p2e1.md
│ ├── p2e2.md
│ ├── p2e3.c
│ └── ...
└── .clang-format
Les noms des fichiers C sont de la forme p[numéro de la partie]e[numéro de l'exercice].c (ex. p1e2.c pour l’exercice 2 de la partie 1).
Vous pouvez aussi créer des fichiers Markdown p[numéro de la partie]e[numéro de l'exercice].md pour noter les commandes à lancer et vos notes (pour la 2e partie entre autres).
Pour la compilation¶
# Compilation, depuis la racine r3_05_programmation_systeme/ (avec p1e1.c placé dans le dossier p1) :
gcc -std=c2x -Wall -Wextra -pedantic -g p1/p1e1.c
# -std=c2x : utilise la norme C23
# -Wall -Wextra -pedantic : ajoute des avertissements pour détecter plus d'erreurs
# -g : ajoute les informations de débogage dans le programme compilé
# il existe une option "-o nom_prog" qui permet de donner un nom au programme compilé
# sans le -o nom_prog, le nom du programme est a.out, créé dans le dossier courant (pas dans p1/)
# et écrasé à chaque compilation (ex. -o p1/p1e1 pour le garder)
# Exécution :
./a.out
# Exécution avec valgrind pour détecter des bugs mémoire :
valgrind ./a.out
# Exécution de valgrind en mode détaillé :
valgrind --leak-check=full --track-origins=yes -s ./a.out
# --leak-check=full : détaille chaque fuite mémoire
# --track-origins=yes : indique d'où viennent les valeurs non initialisées
# -s : affiche la liste des erreurs détectées
Si vous utilisez votre machine perso¶
Sous Unix-like¶
Paquets à installer :
Debian/Ubuntu :
sudo apt update sudo apt install build-essential gdb valgrind clang-format make strace
Fedora :
sudo dnf groupinstall "Development Tools" sudo dnf install gdb valgrind clang-tools-extra make strace
Arch :
sudo pacman -S base-devel gdb valgrind clang make strace
macOS (avec Homebrew) : configuration non testée. La plupart des TP devraient fonctionner, mais
valgrindfonctionnera peut-être moins bien que sous Linux :brew install gcc gdb valgrind clang-format make
Sous Windows¶
C’est un cours de programmation système sous Unix. Je n’ai pas testé, mais a priori certains TP ne fonctionneront pas nativement sous Windows (surtout pour les parties processus et threads).
Vous pouvez au choix :
installer Linux en dual boot ;
passer par WSL (solution conseillée, voir aussi la page outils) ;
utiliser un conteneur Docker ;
utiliser une machine virtuelle.
Dans les quatre cas, faites-le avant de venir en cours ; sinon, utilisez les PC des salles.