Sorbonne Université Master 2017 2018
PR : Travaux Dirigés 2. Fonctions sur fichiers

Cette séance est consacrée aux manipulations de fichiers en POSIX.



1 Liens et fichiers

Ecrivez un programme en C qui lit sur la ligne de commande deux chemins absolus dans l’arboresence Unix, et teste s’il s’agit du même fichier. On utilisera la fonction stat. Testez votre programme sur différents cas, notamment des liens symboliques ou non symboliques.

Exemple d'appel :
$PWD/bin/memefichier $PWD/src/memefichier.c $PWD/src/../src/memefichier.c
Fichier à créer : src/memefichier.c

2 Droits sur un fichier

Ecrire un programme qui permet d’effacer, de renommer ou de changer les droits d’un fichier existant. On utilisera les fonctions unlink, rename et chmod. Le programme reçoit en argument :

  1. type d’opération :
    • “E” ou “e” pour effacer
    • “R” ou “r” pour renommer
    • “C” ou “c” pour changer les droits
  2. nom du fichier
  3. nom du fichier à renommer ou nouveaux droits :
    • “R” ou “r” (read-only / lecture seulement)
    • “W” ou “w” (read-write / lecture-ecriture)

Observations :

  1. Le programme doit vérifier que le deuxième argument n’est pas un répertoire (utiliser la fonction stat).
  2. pour le changement de droits en “read-only” n’oubliez pas de donner le droit d’écriture au propriétaire du fichier.
Exemple d'appel :
$PWD/bin/droitsfichier c makefile W
Fichier à créer : src/droitsfichier.c

3 Remplacement dans un fichier

Ecrire un programme qui reçoit au moins trois arguments :

  1. un nom de fichier à créer ;
  2. un mot quelconque ;
  3. une suite de mots quelconques.

Le programme créer le fichier à l’aide de open. Il écrit ensuite la suite des mots, séparés par un espace, dans le fichier, ainsi que dans le flux de sortie, le dernier mot étant suivi d’un retour à la ligne.

Ce même fichier est ensuite parcouru en utilisant la fonction read et la lecture s’arrête au premier espace. On remplace alors le mot suivant par le mot donné en deuxième argument. On suppose que le remplaçant et le remplacé sont de même longueur.

Exemple d'appel :
$PWD/bin/remplacedansfichier texte.txt toi a moi de jouer; cat texte.txt
Fichier à créer : src/remplacedansfichier.c

4 Redirection

En utlisant la fonction dup2, écrire une fonction Rediriger_stdout redirigeant la sortie standard vers un fichier donné en argument. On considère que le fichier n’existe pas. Ecrire ensuite une deuxième fonction Restaurer_stdout qui restaure la sortie vers le terminal. Ecrire enfin une fonction main prenant en argument un nom de fichier, et qui appelle 3 fois la fonction printf, les deux premiers appels encadrant un appel à Rediriger_stdout sur le fichier indiqué, et les deux derniers un appel à Restaurer_stdout. Qu’observez-vous dans le flux de sortie et le fichier ?

Exemple d'appel :
$PWD/bin/rediriger trace.txt; cat trace.txt
Fichier à créer : src/rediriger.c

5 Annexes


makefile