Consignes

Pour la 1ère séance

Créez le répertoire de travail et installez les extensions VSCode :

# 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 settings pour vscode
wget https://members.loria.fr/cyril.grelier/r3_05/files/settings.json -P .vscode/
wget https://members.loria.fr/cyril.grelier/r3_05/files/p1e1.c
code .

Une fois dans VSCode, ouvrez le fichier p1e1.c et faites le raccourci Ctrl+Shift+i (ou Ctrl+Shift+p puis écrivez format document), dans la fenêtre qui s’ouvre, choisissez l’option pour configurer un formateur puis choisissez clang-format. Maintenant, quand vous enregistrez le fichier, l’indentation sera corrigée automatiquement.

Structure du dossier (tous les fichiers dans le même dossier) :

r3_05_programmation_systeme/ <- VSCode doit être ouvert depuis ce dossier
├── .vscode/
│   └── settings.json
├── .clang-format
├── p1e1.c
├── p1e2.c
├── ...
├── p2e1.md
├── p2e2.md
└── p2e3.c

Ou (un 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

Le nom des fichiers C sont p[numero de la partie]e[numero de l'exo].c -> p1e2.c pour l’exo 2 de la partie 1.

Vous pouvez aussi créer des fichiers Markdown p[numero de la partie]e[numero de l'exo].md pour les commandes à lancer et notes (pour la 2ème partie entre autres).

Pour la compilation

# Compilation :
gcc -std=c2x -Wall -Wextra -pedantic -g p1e1.c -o p1e1
# si p1e1.c est dans un dossier p1
gcc -std=c2x -Wall -Wextra -pedantic -g p1/p1e1.c -o p1e1

# -std=c2x : utilise la norme du C23
# -Wall -Wextra -pedantic : ajoute des avertissements pour détecter plus d'erreurs
# -g : Ajoute les infos de debug dans le programme compilé
# -o nom_prog : nom du programme compilé
# sans le -o nom_prog, le nom du programme est a.out

# Exécution :
./p1e1
# ou si vous n'avez pas utilisé l'option -o
./a.out

# Exécution avec valgrind pour détecter des bugs mémoire :
valgrind ./p1e1
valgrind ./a.out

# Exécution avec valgrind avec plus d'info
valgrind --leak-check=full --track-origins=yes -s ./p1e1
valgrind --leak-check=full --track-origins=yes -s ./a.out

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
    
  • Fedora :

    sudo dnf groupinstall "Development Tools"
    sudo dnf install gdb valgrind clang-tools-extra make
    
  • Arch :

    sudo pacman -S base-devel gdb valgrind clang make
    
  • macOS (avec Homebrew), je n’ai pas testé sous mac mais normalement tous les TP devraient fonctionner, 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 à priori tous les TP ne fonctionnent pas sous Windows (pour les parties processus et threads surtout).

Vous pouvez au choix :

  • installer un dual boot avec un linux

  • passer par WSL

  • utiliser un docker

  • utiliser une machine virtuelle

Dans les 4 cas, faites le avant de venir en cours sinon utilisez les pc des salles.