Université Pierre et Marie Curie Master 2016 2017
PR : Travaux sur Machine 1. Fichiers et Processus
Cette séance est consacrée aux méta-données associées aux fichiers, notamment lorsqu’elles sont utilisées par des processus concurrents. Par rapport à la séance précédente, on sera plus soigneux quant au traitement d’erreur. On pourra s’inspirer du fichier C fourni en annexe pour cela.
Warning: fsockopen(): unable to connect to ssl://www-master.ufr-info-p6.jussieu.fr:8083 (Connection refused) in /dsk/www-master/html/2016/ecrire/inc/distant.php on line 699
Warning: fsockopen(): unable to connect to ssl://www-master.ufr-info-p6.jussieu.fr:8083 (Connection refused) in /dsk/www-master/html/2016/ecrire/inc/distant.php on line 699
Warning: fsockopen(): unable to connect to ssl://www-master.ufr-info-p6.jussieu.fr:8083 (Connection refused) in /dsk/www-master/html/2016/ecrire/inc/distant.php on line 699
1 Recopie de fichier
Ecrire en C un programme qui prend en argument deux noms de fichier et recopie intégralement le contenu du premier dans le second, en utilisant les fonctions POSIX open, read et write. On donnera au deuxième fichier les droits en lecture et écriture pour soi (à l’aide du 3e argument de open ou en appelant la fonction chmod). On veillera à dénoncer (avec la fonction perror) les cas d’erreur suivants :
- la ligne de commande ne contient pas exactement 2 noms ;
- le premier nom ne désigne pas un fichier régulier et accessible en lecture ;
- le second ne peut être créé (répertoire inaccessible en écriture, ou entrée déjà existante dedans).
En cas de réussiste, le programme 0 sinon il retourne la valeur de errno.
$PWD/bin/mycp src/mycp.c cp.c
2 Remontée de valeurs
Ecrire en C un programme prenant en argument un nombre n et un nom de fichier. Le processus principal doit créer n processus fils, à l’aide de fork. Chaque processus fils produit une valeur aléatoire qu’il insère dans le fichier donné en 2e argument, à destination du processus principal. La valeur aléatoire est calculée par :
(int) (10*(float)rand()/ RAND_MAX)
De son côté, le processus principal doit attendre la terminaison de tous ses fils, puis extraire toutes les valeurs du fichier pour ensuite les additionner et enfin afficher la somme résultante. On pourra utiliser waitpid appliqué aux résultat de fork pour attendre les terminaisons, puis utiliser lseek. On contrôlera les cas d’erreurs comme à l’exercice précédent.
$PWD/bin/remonte 8 aleas
3 Processus concurrents sur un fichier
On considère le programme forkfile.c fourni en annexe :
Quels sont les contenus possibles du fichier fich1 ?
4 Fonctions POSIX vs. fonctions C
Écrire en C deux fonctions qui lisent caractère par caractère un fichier passé en argument, et qui affichent chaque caractère dès qu’il est lu. Ces fonctions utiliseront 3 processus partageant le même descripteur et agissant à l’identique (l’identité de chaque processus est affichée avec le caractère lu). La première utilisera les standard POSIX open et read, la seconde fopen et fgetc. Vous écrirez un unique programme qui, selon que son premier argument est -p ou -C appliquera l’une ou l’autre de ces fonctions sur le fichier donné en 2e argument. Vous contrôlerez les cas d’erreur comme précédent. Quelle différence observez-vous entre les deux modes d’appels ?
$PWD/bin/lectures -p src/lectures.c; $PWD/bin/lectures -C src/lectures.c
5 Annexes
- Valid CSS 2.1
- Valid XHTML Basic 1.1
- Triple-A conformance Web Content Accessibility Guidelines 2.0
- Valid RSS Atom
-
Calculé le 22 janvier 2021 à 23h03minpar DidacSPIPUniversité Pierre et Marie Curie
- Mobile OK
- SPIP