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 :

  1. ouvrez le fichier p1/p1e1.c ;

  2. faites le raccourci Ctrl+Shift+I (ou ouvrez la palette avec Ctrl+Shift+P puis écrivez Format Document) ;

  3. 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 valgrind fonctionnera 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.