SEPC FAQ Tp Shell

De Ensiwiki
Aller à : navigation, rechercher
  1. Lors de la création d'un fichier par touch, puis de l'appel d'un ls -s sur le fichier en question, la taille affichée est de 8 et non de 0. Problème lié à l'ordinateur apparemment, avez-vous des idées pour corrige ce problème qui empêche de passer les tests ?
    • Réponse :
  2. Lors de l'exécution de valgrind, ce dernier recense d'innombrables erreurs dans la bibliothèque Guile. Il détecte aussi d'autres erreurs dans notre programme (guile désactivé) alors que tous nos malloc sont free plus tard. Faut-il libérer d'autres ressources, Faut-il appeler freecmd nous-mêmes ?
    • Réponse :
  3. Faut-il exécuter ps pour réaliser la commande "jobs" ?
    • Non, il faut implémenter la commande "jobs" soi-même. Elle ne doit afficher que les processus en cours d'exécution et pas ceux dont l'exécution est déjà terminée. Il faut donc stocker des informations sur les processus en tâche de fond lors de leur création.
  4. Quelques explications sur la structure cmdline :
    • La structure cmdline est renseignée après avoir exécuté la fonction parseline. Quelques exemples :
      • "ls -a" : seq[0][0] = "ls", seq[0][1] = "-a", seq[1] = NULL, bg = 0, in = NULL, out = NULL
      • "ls | grep b" : seq[0][0] = "ls", seq[0][1] = NULL, seq[1][0] = "grep", seq[1][1] = "b", bg = 0, in = NULL, out = NULL
      • "sleep 20 &" : seq[0][0] = "sleep", seq[0][1] = "20", bg = 1, in = NULL, out = NULL
      • "ls -l > toto" : seq[0][0] = "ls", seq[0][1] = "-l", bg = 0, in = NULL, out = "toto"
  5. Comment fonctionne le main ? Comment la fonction executer est-elle appelée lors d'une commande scheme ?
    • Le main est composé de trois parties principales :
      • Le début du main lit une commande depuis le prompt du shell.
      • La 2ème partie entre "#ifdef USE_GUILE" et "#endif" n'est exécutée que si la commande est une commande scheme (si elle commence par '('). Cette partie n'est utile qu'à partir de la section 6 du sujet. Dans cette partie, l'interpréteur scheme est appelé pour évaluer la ligne de commande. Si elle contient (executer ...), l'interpréteur appelle la fonction executer_wrapper qui va elle-même appeler executer. L'interpréteur scheme connait la fonction executer_wrapper et l'associe à la commande (executer ...) grâce à la ligne suivante : scm_c_define_gsubr("executer", 1, 0, 0, executer_wrapper); Cette partie se termine par un continue, la fin de la boucle while n'est donc pas exécutée.
      • La fin du main n'est exécutée que si la commande n'est pas une commande scheme (si elle ne commence pas par '('). La fonction parsecmd est appelée et le résultat obtenu dans la structure cmdline est affiché.

Revenir à la page SEPC