Programmation Système et Réseau
TP n° 1




Notions abordées :


Exercice 1.


Ecrire un code C qui implémente la fonction de librairie
 
    int getchar (void)

qui renvoie un caractère lu sur l'entrée standard ou la constante EOF en fin de fichier. Vous ne devez utiliser que des primitives système.
Quel est la valeur de la constante EOF ?


Exercice 2.

Ecrire un code C qui implémente une version bufferisée de la fonction de librairie

    int getchar (void)

(Les caractères lus sur l'entrée standard seront stockés dans une zone tampon de taille MAXBUF (une constante à définir). Un appel à getchar ne renvoie qu'un seul caractère et ne provoque un appel à read que lorsque le tampon est vide, c'est-à-dire lorsque les MAXBUF caractères du tampon ont déjà été renvoyés.) 


Exercice 3.

Ecrire un code C qui affiche en clair le type du fichier demandé (répertoire, fichier ordinaire, etc...), ainsi que ses permissions (lecture, écriture et exécution sous la même forme que la commande ls avec l'option -l).


Exercice 4.

Ecrire un code C qui prend en paramètre un nom de répertoire, et qui affiche tous les objets contenus dans ce répertoire. On prendra les mêmes conventions de restriction d'affichage que la commande ls (pas d'affichage des noms commençant par un point).


Exercice 5.

On croit souvent que les primitives système étant de plus bas niveau, sont plus efficaces que les fonctions de biliothèques équivalentes. On désire confirmer ou infirmer cette proposition par l'expérimentation.

Pour cela, on demande de rédiger deux programmes pour copier l'entrée standard sur la sortie standard.
Vous utiliserez la commande UNIX time pour comparer les temps d'exécution, en considérant somme des temps CPU en mode utilisateur et en mode système. Vous effecturez ces tests pour la copie d'un fichier d'au moins 10Mo.

En prenant comme taille de buffer les puissances successives de 2 (1, 2, 4, 8, ..., 1024) à partir de quelle taille de buffer est-il plus intéressant d'utiliser les primitives système que les fonctions de bibliothèque ?


Exercice 6.

Télécharger ce petit lexique qui contient tous les mots de 5 lettres. Ecrire un code C qui prend un mot de 5 lettres en argument et qui détermine si ce mot appartient au lexique. Pour accélérer la recherche, on procédera par dichotomie (en se servant de la primitive lseek).


Exercice 7.

Ecrire un programme qui affiche uniquement les 10 derniers caractères d'un fichier dont le nom est donné en argument. On écrira une version bufferisée où les caractères du fichier sont lus par paquets de taille MAXBUF > 1. 


Exercice 8.

Ecrire un programme qui change le contenu d'un fichier (dont le nom est donné en argument) en convertissant les lettres en majuscules. La conversion de minuscule en majuscule peut se faire à l'aide de la fonction toupper. La modification est à faire sur place par paquets de taille MAXBUF.