général
curriculum vitae
contact

CARDIWEB
2007
2006
2005

Etudes
les projets
les sites web
les exposés

liens
OTB World
EPITA
PCN
CARDIWEB

 
Groupe de News:			epita.cours.c-unix.mini-projs
Date de rendu:			mercredi 20 novembre 2002 - 08:00:42
Répertoire de rendu:		~/c/rendu/mp/minishell
Droits sur le rep et les exos:	700 sur ~/c/rendu/mp/ et ~/c/rendu/mp/minishell
 				700 pour les scripts tels que configure
 				600 pour les fichiers
 				o+x ~/ ~/c/ ~/c/rendu/


Introduction
============

	When you log into a computer, it must provide you with some
	kind of interface

						  -- the shell. 

	That name came from the first version of Unix

		-- Kernighan and Ritchie described a "shell" in their
                   first paper about Unix.

Robustesse
==========

		En aucun cas, votre programme ne doit générer d'erreur
		qu'il ne peut contrôler  (segv, bus, etc...).  Si l'un
		des   cas  ci-dessus   se  présente   lors   de  votre
		soutenance, vous  vous verrez sanctionné de  la note 0
		si vous n'etes pas  capable de résoudre le probléme en
		moins de 2 minutes.


Mini ligne de commande
======================

		Votre minishell devra gérer l'execution de commandes
		de base, la simple direction, la double redirection et
		la simple indirection.

		Votre minishell devra donc être capable de gérer dans
		un premier temps des expressions tel que :

		$ ls -la
		$ echo login_x > AUTHORS
		$ ypcat passwd >> users_list
		$ < users_list wc -l

Pipe
====

		$ ls | more

Background
==========

		En terminant  la commande par un '&',  la commande est
		activé  de façon  asynchrone  pour l'utilisateur.   Le
		shell  crée un  job en  tache de  fond  (Attention aux
		zombies).

		$ emacs & 

Builtins 
========

		Vous  devrez implémenter  quelques  builtins de  base,
		telles que :

		       echo
		       cd
		       kill
		       exit

		Les  builtins devront être  disponibles sous  forme de
		librairies  dynamiques  respectivement  chargeable  et
		déchargeables  par les  builtins load  et  unload, qui
		elles sont bien entendu liées statiquement.

		$ load kill.so

Ligne de commande avancée
=========================

		$ ls -l -a -F | cat | grep ^drw
		$ ypcat passwd | grep /a1 > a1_list 
		$ < /etc/passwd cat -n | grep -v root | grep sbin > /tmp/out 2> /dev/null

Bonus
=====
	- gestion du <<, par exemple :
	
		  $ cat << EOF > titi

	- gestion du && et du ||

		  $ true && echo OK
		  OK
		  $ false || echo OK
		  OK

	- utilisation de execve(2) a la place de execvp(3)

	- documentation

		  $ man minishell

Syscalls, fonctions et macros autorisees
========================================

read(2), write(2)
open(2), close(2)
dup(2), dup2(2)
pipe(2)
fork(2)
chdir(2)
stat(2)
kill(2)
wait*(2) et les macros associées de sys/wait.h
execve(2)

exec*(3), getenv(3), setenv(3)
malloc(3), free(3) 
assert(3), perror(3), exit(3)
dlopen(3), dlsym(3), dlclose(3), dlerror(3)

sigaction(2), sigprocmask(3)

unlink(2), mkstemp(3)

Modalités de rendu
==================

	Votre  rendu doit  se conformer  au CSS,  au moins  en  ce qui
	concerne les aspects suivants :

		- mise en forme du code source
		- composition du fichier Makefile et afférents
		- fichier AUTHORS

	Toutes les fonctions nécessaires a la compilation doivent être
	situées dans  le répertoire de rendu ou  des sous-répertoire :
	le répertoire de  rendu doit être autonome et  les fichiers de
	contrôle  (Makefile et  autres scripts  éventuels)  doivent se
	trouver à sa base.

	Les   sources   doivent   être  inaccessibles   par   d'autres
	utilisateurs,  et le  rendu se  fera par  archive  cryptée, en
	utilisant la commande suivante :

		  ~acu/mbin/rendu.sh mp minishell




 

 
 
     

| Copyright 2002 © OTB World Conception |
.:: version du site : v2.0 ::.