Projet Systèmes I (Licence 2002-2003)

L'auteur de cette page est : Jean-Baptiste Yunes

Introduction

On se propose de réécrire les fonctions d'entrées-sorties de la librairie standard du langage C suivantes : fopen, fflush, fclose, fseek, fread, fwrite. De même que dans la librairie standard, ces fonctions seront implantées en utilisant les primitives POSIX correspondantes et devront gérer un tampon d'entrée-sortie. Nous renvoyons au manuel en ligne de ces fonctions pour toute précision sur leur sémantique.

Réalisation

  1. Construire un fichier d'entête mystdio.h contenant la déclaration d'une constante entière MYBUFSIZ, la déclaration/définition du type MYFILE (qui sera une structure contenant, entre autres, le descripteur du fichier ouvert et le tampon d'entrée-sortie de taille MYBUFSIZ associé à ce fichier) ainsi que les prototypes suivants:
    	MYFILE *fopen(const char *filename, const char *mode);
    	int myfread(MYFILE *stream,int n,int taille,void *tampon);
    	int myfwrite(MYFILE *stream,int n,int taille,void *tampon);
    	int myfseek(MYFILE *stream,int position,int origine);
    	int myfflush(MYFILE *stream);
    	int myfclose(MYFILE *stream);
    
    On définiera aussi les valeurs symboliques pour les origines (MYSEEK_CUR, MYSEEK_SET et MYSEEK_END);
  2. Construire, pour chaque fonction, un fichier contenant son implémentation;
  3. Générer une bibliothèque (statique) de nom libmyio.a qui sera utilisée pour compiler tout programme utilisant une fonction de cette bibliothèque;
  4. Construire un fichier cp.c qui implémente une version simplifiée de la commande cp en utilisant vos fonctions. Cette commande prendra exactement deux arguments: le premier devra être le nom d'un fichier existant, le second le nom d'un fichier qui sera écrasé s'il existe déjà et créé dans le cas contraire. On prendra soin d'écrire un programme compatible avec la bibliothèque standard du C (ie: pouvant etre recompilé en renommant simplement les fonctions);
  5. La construction d'un fichier Makefile (contenant toutes les dépendances) et l'utilisation de make sont exigés.

Les programmes seront impérativement écrits en C standard (ANSI) et respecterons la norme POSIX. On s'efforcera de vérifier que le code produit est portable sur différentes machines de l'UFR. Par conséquent, ils devront pouvoir être compilé (sans warning) avec les options suivantes des compilateurs gcc et cc (sur les serveurs HP):

	cc -c -D_POSIX_C_SOURCE -Aa -w1 fichier.c 
	gcc -c -D_POSIX_C_SOURCE -Wall -ansi -pedantic-errors fichier.c

Divers

Le projet sera réalisé par groupe de trois étudiants au plus. Il est vivement déconseillé (mais pas interdit) de travailler seul. Les différentes dates (remise d'un rapport et soutenance) seront précisées ultérieurement mais se situeront aux alentours de la fin Janvier 2003.