Dans ce chapitre, beaucoup d'exercices sont en rapport avec le projet final (création du shell). Il faut garder ça en tête lors de la réalisation des exercices pour s'éviter un double travail.
Lorsque le cours dit "notre shell" ou le “mini shell” il parle du shell (du programme) dont le début est donné page 104 (chapitre 2.7) et qu'il faut modifier modifier petit à petit.
Quand le cours dit d'ajouter une commande, il dit bien “commande”, pas "programme" donc c'est à ajouter dans le shell du 2.7.
L'utilisation de forks peut poser problème pour le débogage. Dans gdb, le mode suivant peut s'avérer très utile :
set follow-fork-mode child ou set follow-fork-mode parent
qui précise quel processus le debugger doit suivre. On peut également utiliser ce mode :
set detach-on-fork
qui permet de faire tourner les deux processus.
Source : https://ftp.gnu.org/old-gnu/Manuals/gdb/html_node/gdb_25.html
Pour utiliser ces options dans VsCode, il faut modifier dans le fichier launch.json la ligne : “text” : “gcc-set follow-fork-mode child”
Cet exercice est noté “Au Choix”, mais il fait partie du projet final. Le programme du cours dont il est fait mention dans l'énoncé correspond au programme du shell p.107.
Il faut faire cet exercice pour comprendre l'exercice suivant (2.17).
Dans le code associé à l'exercice, il est écrit à la ligne 13 :
execl(“/bin/ls”,“ls”,“-l”,0);
Si vous compilez avec gcc -Wall, vous obtiendrez le warning suivant :
missing sentinel in function call [-Wformat=]
Cela vient du fait que le 0 final n'a pas été reconnu comme le caractère nul. Remplacez la ligne par la suivante :
execl(“/bin/ls”,“ls”,“-l”,(char *)NULL);
Lorsque le cours parle du “mini-shell”, c'est le shell que vous avez débuté au chapitre 2 basé sur le code du cours page 104 (chapitre 2.7). Ce n'est pas le shell que vous utilisez dans votre terminal.
Modifier