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

 
:: miniprojet libstream ::
 	

Groupe de News: 		epita.cours.c-unix.libstream
Date de rendu:			mardi 15 Octobre 2002 - 23:42
Repertoire de rendu:		~/c/rendu/mp/libstream/
Droits sur le rep et les exos : 705 sur les répertoires,
				705 sur "configure" s'il existe,
				604 pour les fichiers,
				au moins 701 sur ~

(modalités de rendu en fin de sujet)

--------------------
Fonctions autorisées
--------------------

open(2) close(2) read(2) write(2) lseek(2) malloc(3) free(3)
assert(3)

-----------
Description
-----------

Votre bibliothèque doit  gérer des entrées/sorties tamponnées.  (dites
<< bufferisées >>).

Pour comprendre  le fonctionnement attendu  des différentes fonctions,
consultez leur  pages du  manuel respectives (supprimez  simplement le
prefix ``my_'' pour avoir la  page de manuel correspondante).  Le type
FILE est remplacé par un type t_my_file que vous définirez vous-même.

Votre bibliothèque doit contenir au moins les fonctions suivantes :

(prototypes:)

	t_my_file	*my_fopen(const char *path, 
		 	  const char *mode);
	
	int	my_fclose(t_my_file *stream);
	
	int	my_fputc(int c, t_my_file *stream);

	int	my_fgetc(t_my_file *stream);

Une  fois ces  fonctions implémentées,  vous  devez, incrémentalement,
fournir les fonctions suivantes :

Niveau 1
--------

	size_t	my_fread(void *ptr, 
			 size_t size, 
			 size_t nmemb, 
			 t_my_file *stream);

	size_t	my_fwrite(const void *ptr, 
			  size_t size, 
			  size_t nmemb, 
			  t_my_file *stream);
			  
	char    *my_fgets(char *str, 
			  int size, 
			  t_my_file *stream);
			  
	int	my_fputs(const char *str, 
			 t_my_file *stream);

	int	my_fflush(t_my_file *stream);

Vous n'avez  pas implémenter le  comportement de my_fflush(NULL)  à ce
niveau.

Niveau 2
--------

	int	my_fseek(t_my_file *stream, 
			 long offset, 
			 int whence);

	long	my_ftell(t_my_file *stream);

	void	my_rewind(t_my_file *stream);

	int	my_fgetpos(t_my_file *stream, 
			   fpos_t *pos);

	int	my_fsetpos(t_my_file *stream, 
			   const fpos_t *pos);

Niveau 3
--------

	t_my_file *my_fdopen(int fildes, 
			   const char *mode);

	t_my_file *my_freopen(const char *path, 
			    const char *mode, 
			    t_my_file *stream);


Par ailleurs, au  niveau 3, vous devez implémenter  le comportement de
my_fflush(NULL).


À chaque niveau, TOUTES les fonctions doivent êtres implémentées.


---------------------------------
Modalités de rendu et contraintes
---------------------------------

Votre  répertoire  de rendu  doit  contenir  vos  sources, un  fichier
Makefile, et optionnellement un script configure.

Votre  Makefile   doit  construire  une   bibliothèque  contenant  les
fonctions  que vous aurez  implémentées, sous  la forme  d'une archive
autonome de nom :
	    
	    libstream_`uname -m`-`uname -s`.a

Par   ailleurs,  vous  devez   utiliser  les   constantes  symboliques
suivantes :

	  MY_READ_SIZE
	  MY_WRITE_SIZE

La définition de ces  constantes symboliques, et elles seules, doivent
se trouver dans un  fichier séparé appelé "libstream_defines.h", situé
à la  racine du  répertoire de rendu.  

Attention, ce fichier  ne devra contenir que ces  deux définitions, il
sera écrasé lors de la  correction pour changer les valeurs numériques
associées.

À titre d'exemple, vous pouvez utiliser les définitions suivantes :

  		#define MY_READ_SIZE    8192
		#define MY_WRITE_SIZE   8192

Les  autres  modalités  de  rendu  (règles  de  Makefile,  options  de
compilation),  ainsi  que  vos  sources, doivent  être  conformes  aux
spécification correspondantes du CSS (<< norme >>).



---------
Remarques
---------

* Vous  devez  implémenter  au  moins  le  comportement  ANSI  de  ces
  fonctions.  Si vous  implémentez des  extensions non-ANSI,  elles ne
  seront pas testées.

* L'archive doit  être _autonome_, c'est-à-dire  qu'elle doit contenir
  les fonctions de la libmy que vous utilisez.

* Le  code d'erreur  EOF  est défini  dans  l'en-tête de  déclarations
  standard stdio.h,  que vous  pouvez inclure UNIQUEMENT  pour obtenir
  cette définition.
  
* Pour obtenir les déclarations standard des fonctions autorisées, vous
  pouvez inclure unistd.h.

* Pour  utiliser la  constante  symbolique NULL  ou  le type  standard
  size_t, utilisez stdlib.h pour en obtenir la définition.

* pour utiliser la fonction open(), vous pouvez inclure le fichier
  fcntl.h.

* N'oubliez pas le fichier AUTHORS, spécifié dans le CSS.

* Vous ne  _devez_ pas  utiliser de variable  globale, ou  de variable
  `static'  hors d'une  fonction.  Vous ne  connaissez  pas le  nombre
  maximum de fichiers qui peuvent être ouverts simultanément.

 

 
 
     

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