Consignes ========= Pour la 1ère séance ------------------- Créez le répertoire de travail et installez les extensions VSCode : .. code-block:: bash # 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) : .. code-block:: text 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) : .. code-block:: text 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 ------------------- .. code-block:: bash # 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 : .. code-block:: bash sudo apt update sudo apt install build-essential gdb valgrind clang-format make - Fedora : .. code-block:: bash sudo dnf groupinstall "Development Tools" sudo dnf install gdb valgrind clang-tools-extra make - Arch : .. code-block:: bash 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 .. code-block:: bash 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.