Consignes¶
Ce cours est prévu pour Linux. Si vous travaillez sur votre PC perso sous Windows, suivez les directives sous Windows d’ici le prochain cours. Pour aujourd’hui, travaillez sur les machines de l’IUT.
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). Sur votre machine personnelle, installez d’abord les paquets indiqués dans la page Outils (en particulier clang-format, utilisé par l’extension xaver.clang-format) :
# 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 .
Si vous utilisez VSCodium (à la place de VSCode), remplacez code par codium dans les commandes ci-dessus. L’extension C/C++ de Microsoft n’est pas disponible sous VSCodium : installez à la place llvm-vs-code-extensions.vscode-clangd (complétion) et vadimcn.vscode-lldb (debug).
Une fois dans VSCode, pour vérifier que le formatage automatique fonctionne :
ouvrez le fichier
p1/p1e1.c;utilisez le raccourci
Ctrl+Shift+Isous Linux (Shift+Alt+Fsous Windows,Shift+Option+Fsous macOS), 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, grâce à l’option editor.formatOnSave du fichier .vscode/settings.json téléchargé. Ce fichier n’est lu que si VSCode est ouvert depuis le dossier r3_05_programmation_systeme/ (voir ci-dessous).
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 (c2x est l'ancien nom de c23, on peut aussi écrire -std=c23)
# -Wall -Wextra -pedantic : ajoute des avertissements pour détecter plus d'erreurs
# -g : ajoute les informations de debug dans le programme compilé
# il existe une option "-o nom_prog" qui permet de donner un nom au programme compilé
# sans -o, le programme s'appelle a.out, est créé dans le dossier courant (pas dans p1/)
# et est écrasé à chaque compilation ; pour le garder : -o p1/p1e1 (puis ./p1/p1e1)
# 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 --show-leak-kinds=all --track-origins=yes -s ./a.out
# --leak-check=full : détaille chaque fuite mémoire
# --show-leak-kinds=all : affiche aussi la mémoire encore accessible (still reachable)
# --track-origins=yes : indique d'où viennent les valeurs non initialisées
# -s : affiche la liste des erreurs détectées
Pour lire la sortie de valgrind, voir la page Outils, section « Analyse à l’exécution ».