$> ls -l
-rwrw-rw- 1 db0   db0 62.1 Ko 2015-03-30 19:37 Impatient C
-rwrw-rw- 1 db0   db0  3.5 Ko 2015-03-30 19:37 Impatient SCM
-rwrw-rw- 1 db0   db0  3.0 Ko 2015-03-30 19:37 Impatient Emacs
-rwrw-rw- 1 db0   db0  2.4 Ko 2015-03-30 19:37 Impatient Man Pages
-rwrw-rw- 1 db0   db0 10.5 Ko 2015-03-30 19:37 Impatient Perl
-rwrw-rw- 1 db0   db0 17.3 Ko 2015-03-30 19:37 Impatient Python
-rwrw-rw- 1 db0   db0 13.6 Ko 2015-03-30 19:37 Impatient Shell Debutant
-rwrw-rw- 1 db0   db0 16.4 Ko 2015-03-30 19:37 Impatient Shell Script
-rwrw-rw- 1 db0   db0  3.4 Ko 2015-03-30 19:37 Impatient Shell
-rwrw-rw- 1 db0   db0  1.8 Ko 2015-03-30 19:37 Impatient Vim


Warning

Contrairement aux autres articles, ceux de cette listes n'ont jamais été vérifiés ni relus depuis que je les ai rédigés en première année. Ils peuvent donc contenir des erreurs. Les informations qu'ils contiennent sont à prendre avec des pincettes et à vérifier.

Archives

Ancien Guest Book

-rwrw-rw- 1 db0   db0  0.9 Ko 2015-03-30 19:37 Financer Ses Etudes
-rwrw-rw- 1 db0   db0  2.4 Ko 2015-03-30 19:37 Languages A Apprendre En Tek1
-rwrw-rw- 1 db0   db0  1.1 Ko 2015-03-30 19:37 Makefile Le Retour
-rwrw-rw- 1 db0   db0  3.0 Ko 2015-03-30 19:37 Makefile De Base
-rwrw-rw- 1 db0   db0  1.2 Ko 2015-03-30 19:37 Pourquoi_printf_met_tout_a_la_fin
-rwrw-rw- 1 db0   db0  0.7 Ko 2015-03-30 19:37 Pourquoi_utiliser_getnextline_plutot_que_read_pour_le_minishell_et_autre_42sh
-rwrw-rw- 1 db0   db0  4.3 Ko 2015-03-30 19:37 Taille De Donnees Et Structures
-rwrw-rw- 1 db0   db0  1.5 Ko 2015-03-30 19:37 Cflags
-rwrw-rw- 1 db0   db0  1.6 Ko 2015-03-30 19:37 Hidenp.c
-rwrw-rw- 1 db0   db0  0.1 Ko 2015-03-30 19:37 Liens_utiles_my_select
-rwrw-rw- 1 db0   db0  2.1 Ko 2015-03-30 19:37 List_chainees.c
-rwrw-rw- 1 db0   db0  1.0 Ko 2015-03-30 19:37 Memo_rendu
-rwrw-rw- 1 db0   db0  4.8 Ko 2015-03-30 19:37 Minishell.c
-rwrw-rw- 1 db0   db0 32.7 Ko 2015-03-30 19:37 My_printf.c
-rwrw-rw- 1 db0   db0  4.5 Ko 2015-03-30 19:37 Ordalphlong.c
-rwrw-rw- 1 db0   db0  3.7 Ko 2015-03-30 19:37 Qcm.txt
-rwrw-rw- 1 db0   db0  5.8 Ko 2015-03-30 19:37 Str_to_inttab.c
-rwrw-rw- 1 db0   db0  0.6 Ko 2015-03-30 19:37 Verifier_les_fuites_memoires
-rwrw-rw- 1 db0   db0  0.5 Ko 2015-03-30 19:37 Verifier_les_syscall
/*
** Bonjour moutar_j et les autres petits potes !
** Aujourdhui, nous allons expliquer sans entrer dans les details
** le principe du minishell1 !
** Amusez-vous bien.
*/

intmain(int argc, char **argv, char **env)

/*
  ETAPE 1 PROMPT
  faisons le simple principe d’afficher un prompt qui lit des
  commandes et fait rien (pour l’instant) puis qui se raffiche.
*/

  while (42)
    {
      my_putstr("mon_prompt>");

/* Hein ? Mais-euh ca boucle infini >.< Oui, c’est le but. */

      get_next_line(0);

/* rappel : mon get_next_line ici present lit sur l’entree standart en renvoie
   une chaine de caractere correspondant a ce qu’il a lu jusqu’a un ’\n’.
   MAIS ! Pourquoi un get_next_line plutot qu’un simple read, me direz-vous ?

   Parce qu’un read, vous allez lui envoyer une certaine taille de buffer.
   Il se peut que l’utilisateur (vetu de rouge et sans doute mal-intentione)
   ecrive plus que ce buffer ! il le depasse, place des octets arbitraires sur
   la pile au dela de la zone que vous lui avez reserve. Cela ecrase une
   partie de la pile, et l’utilisateur mal-intotionne y aura place du code !
   Ainsi, il entrera a l’interieur de votre machine et la detruiera de 
   l’interieur ! Mouhahaha et il deviendra le maitre du monde !

   Ou plus simplement, vous risquez de Segmentation Faulter.
*/
    }

/*
  ETAPE 2 LANCER UN PROGRAMME - RECUPERER LE PATH
  essayons de lancer un programme. Pour cela, nous utilisons execve.
  Cette fonction prend en parametre un path. Il faut donc commencer par
  trouver ce path. Pour cela, notre environnement nous fournit un element
  appele PATH.

  -- > faire un str_to_wordtab de ce qu’a renvoyer get_next_line.
  -- > faire une fonction qui recupere le contenu d’un element de l’env.
*/

  char*my_getenv(char **env, char *elem/*"PATH"*/)
{
  /* je parcours l’env, je trouve la ligne qui commence par PATH*/
  /* j’envoie l’adresse de ce qui se trouve apres le ’=’ */
}

/*  -- > faire une fonction qui recupere uns a uns les paths dans cet elem
    -- > faire une fonction qui ajoute a la suite du path recupere le
  element du tableau de str_to_wordtab.
    Tester ces paths avec la fonction access. Comment elle marche ? -> man
*/

/*
  ETAPE 3 LANCER UN PROGRAMME - FORKER
  Une fois qu’on a recuperer le path, qu’on sait que c’est le bon, on va
  forker. Pourquoi ? parce qu’apres avoir lancer execve, le programme s’arrete.
  On veut arreter le programme, pas le minishell. Il faut donc duppliquer le
  prog. C’est le role de fork. Le cours explique comment il marche.
  A vous de jouer.
*/

/*
  ETAPE 3 LANCER UN PROGRAMME - EXECVE
  execve doit etre execute dans le fils. S’il reussit, alors il ne fera pas ce
  qu’il y a apres puisqu’il quitte. Sinon, il le fera.
  il prend en parametre le path calcule precedemment et un tableau a deux
  dimemsions vers chaque arguments exemple :
  {"ls", "-l", "-a", ".", NULL}
  ca tombe bien, c’est exectement ce qu’on a fait avec le str_to_wordtab.
  et l’environnement sous forme d’un tableau.
*/

/*
  et voila ! On a lance un programme a partir de notre minishell.
  Maintenant, on a quelques builtins a realiser. 
  env, setenv et unsetenv. Le mieux serait de le faire avec des listes
  chainees. Je vous ai appris a en faire dans un precedent cours.
  Si vous n’etes pas a l’aise, vous pouvez utiliser des tableaux.
*/

/*
  ETAPE 4 ENV
  -> Si vous prenez la solution liste chainee (trop classe wahou), faites une
     fonction qui transforme le char **env en t_list *env. Cette fonction
     ressemblera a l’exo de piscine "my_params_in_list.c" (Jour 11).
     Afficher cette liste.
  -> Si vous choisissez de garder un tableau, afficher simplement ce tableau.
*/

/*
  ETAPE 5 SETENV
  liste chainee : ajouter un element a la liste. A la fin de la liste. Pas
  tres difficile :) mais attention, vous devez verifier si l’element n’
  existe pas deja et si c’est le cas modifier cet element.
  tableau : ajouter un element a la fin du tableau. Pour ca, il va falloir
  faire un realloc, c’est a dire free(env) (sauf si c’est le tableau de depart)
  malloc(la taille du tableau d’avant + 1). pareil, si l’element existe,
  il faut le modifier.
*/

/*
  ETAPE 6 UNSETENV
  liste chainee : parcourir sa liste, trouver (ou pas) l’element, l’enlever.
  pop_elem_from_list (google :))
  tableau : parcourir le tableau, trouver (ou pas) l’element, realloc le
  tableau en enlevant l’elem.
*/

/*
  ETAPE 7 CD
  la, je me contenterait de vous dire "chdir". Et man. Et google.
*/

/*
  Et voila, t’as un super minishell !
  Merci, db0-lepage_b !
  Bisous ? Non...? Ok.
*/