Вы находитесь на странице: 1из 11

Systme Unix

42sh

Contact : Yammer PSU 2020

Abstract:man tcsh

Table des matires


.1
.2
.3
.4
.5
.6
.7

Dtails administratifs . . . . . . . . . . . . . . . . . . . . . . . . . . .
Sujet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Partie obligatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Partie optionelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Conseils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Fonctions autorises . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Moulinette . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

2
3
4
5
7
8
10

Systme Unix

.1

42sh

Dtails administratifs

Les sources doivent tre rendues sur le dpt PSU_anne_42sh


ex : PSU_2013_42sh pour lanne 2013-2014
Nom du binaire : 42sh
Votre binaire devra compiler avec un Makele.
Les questions sont poser sur le forum dans le thread "42sh" du module B2 Systeme
Unix.
Seules Les rponses du responsable du module seront considres comme ocielles.
Il vous est conseill de travailler plusieurs groupes et confronter vos rsultats.
Cependant, chaque groupe doit avoir une implmentation qui lui est propre.
Il doit y avoir un chier auteur avec un (et un seul) login par ligne.
Chaque membre du groupe doit pouvoir expliquer le fonctionnement gnral et la
structure densemble du projet, les structures utilises, ainsi que lutilit de chaque
partie. Il doit aussi tre capable dexpliquer ce quil a lui- mme fait et pouvoir le
modier ou le refaire lors du pitch.
Tout ce dont vous avez besoin doit se trouver dans le rpertoire de rendu et ses
sous-rpertoires (rien ailleurs, mme avec les droits et des paths absolus).

Systme Unix

.2

42sh

Sujet
Il sagit ici dcrire un SHELL Unix.
Le projet est compos de 2 parties dcrites ci-dessous :
Une partie obligatoire, raliser imprativement
Une partie optionelle, qui ne sera prise en considration lors de la Keynote
la stabilit et lutisabilit de lensemble sera largement prise en compte. Il serait
souhaitable dtre conforme aux usages et habitudes.

Systme Unix

.3

42sh

Partie obligatoire

Cette partie doit IMPERATIVEMENT ETRE INTEGRALEMENT FONCTIONNELLE. Dans le cas contraire, votre note sera de 0.
Une acquisition de ligne minimale :
achage dun prompt (plus ou moins labor)
rcupration de la ligne tape (un get_next_line(0) devrait sur)
Excution des commandes avec leurs paramtres
ex: $>ls l /
gestion correcte des espaces et tabulations
gestion du PATH (pas forcment de systme de cache)
gestion des erreurs et de la valeur de retour
ex: $> ./str_maxlenoxc "ddd" "dd" "who"
segmentation fault (core dumped)
$>
Les redirections :
ex: $> </etc/hosts od -c | grep xx | wc >> /tmp/z
<>
les pipes
Les builtins :
cd (avec cd seul et cd -)
echo
exit
setenv / unsetenv
Les sparateurs :
;
&&
||
4

-l

Systme Unix

42sh

.4 Partie optionelle
Cest sur cette partie que vous gagnerez en thorie la majorit des points. Elle est
globalement libre. Vous pouvez faire ce que vous voulez. Cependant, la cohrence de lensemble sera prise en compte.
Encore une fois la stabilit sera beaucoup plus importante que la quantit. Nincluez pas
une option qui pose un problme au reste du programme (surtout la partie obligatoire).
Pensez avant toute chose lutilisabilit et la stabilit.
Pour les diffrentes commandes et la compatibilit (syntaxe), le shell de rfrence
utilis sera le tcsh.
Liste doptions souhaitables :
les inhibiteurs "
ex: $> ls "who|"

""slt\""

le globing * ? [ ]
ex: $> echo {a*[^c],b??.*[a-z]}/b*.{c,h}
le background
ex: $> sleep 100 &
les (magic quote)
ex: $> kill -9 ps ax | grep netscape | awk {print $1}
les ( )
ex: $> (cut -d\ -f2 .note | tr \n +;echo 0)| bc -l
les variables (local et denv).
ex: $> setenv a val;echo $a;ls $a;$a
variables spciales : term, precmd, cwdcmd, cwd, ignoreof ...
history
ex: $history
avec !
ex: $> !ls
ex: $> !12
ex: $> !-4
avec ! et modicateur
ex: $> !ls:s/.c/.h
linker avec ldition de ligne
5

Systme Unix

42sh

alias
dition de ligne :
multi ligne
avec rebinding dynamique
compltion dynamique (chier, commande, contextuel ....)
job control (trs appreci)
scripting

Systme Unix

.5

42sh

Conseils
Conseil 1 : Formez un groupe solide
Vriez que vous pouvez vraiment travailler ensemble (heures, temps, caractres).
Travaillez vraiment en groupe (ensemble et en discutant).
Passez beaucoup de temps analyser les choses tous les niveaux.
Confrontez ensemble vos ides avant de vous lancer dans la ralisation.
Vriez que vous avez bien compris et que les autres membres de votre groupe
ont compris la mme chose.
Parlez en avec dautres groupes.
Conseil 2 : Avancez petit petit
Ne codez rien avant que tout soit clair.
Ne codez rien avant davoir tous vos minishells totalement fonctionnels (pour tous
les membres du groupe). Nous vous conseillons mme de les refaire compltement
en groupe, histoire de voir comment vous codez ensemble.
Faites des scnarios complets de fonctionnement de votre shell. Faites vous des
jeux de test pour tout ce que vous comptez coder. Cherchez tous les cas de gures
(nous les testerons lors de la soutenance).
Faites ces jeux de tests avant de commencer coder.
Confrontez vos listes de cas avec les autres groupes.
Faites une liste claire des options que vous voulez faire en sparant bien les tapes.
Faites un plan gnral sur papier avant dcrire la premire ligne.
Testez tout au fur et mesure du dveloppement de vos fonctionnalits.
Nattendez pas de lavoir "termine".
Nhsitez pas eacer des parties qui vous semblent louches, bancales ou mal
crites (mme fonctionelles). Cela vous rendra service pour la suite.
Ne faites rien que vous ne compreniez compltement.
Assemblez trs souvent (au moins 1 2 fois par semaine) et codez ct les uns
des autres.

Quand votre projet vous semblera fonctionel, faites le tester par


dautres groupes.

Systme Unix

42sh

.6 Fonctions autorises

access
open
read
write
close
pipe
dup
dup2
fork
getpid
getuid
geteuid
getgid
vfork
execve
stat
lstat
fstat,
getsid
getpgid
getpgrp
setpgrp
setpgid
setsid
tcsetpgrp
tcsetattr
tcgetpgrp
tcgetattr
isatty,
getpwnam
getpwent
8

Systme Unix

42sh

getpwuid
getcwd
chdir
opendir
readdir
closedir
glob
signal
kill
wait
waitpid
wait3
wait4
ioctl
rand() et ses fonctions associes
les fonctions printf et derivees,
les fonctions de string.h et strings.h
les fonctions errno, malloc, realloc, calloc, free, bzero, memcpy, memcmp, memset,
strerror, va_start, va_arg, va_list, va_end, va_copy
toute la librairie ncurse