Académique Documents
Professionnel Documents
Culture Documents
2007-2008
Entrées/sorties
Fichiers
Sébastien Paumier
paumier@univ-mlv.fr 2
Retour de printf
$>./test_printf
command=./test_printf
---------------------
paumier@univ-mlv.fr 3
Retour de printf
paumier@univ-mlv.fr 4
Affichage des entiers
● %d : entier signé
● %u : entier non signé
● %o : entier non signé en octal
● %x %X : entier non signé en hexadécimal
int main(int argc,char* argv[]) {
int i=-45,j=43;
$>./a.out
printf("%d\n",i); -45
printf("%u\n",i);
printf("%o\n",j);
4294967251
printf("%x\n",j); 53
printf("%X\n",j);
return 0; 2b
} 2B
paumier@univ-mlv.fr 5
Affichage des réels
● %f : standard, 6 décimales
● %g : standard, sans les zéros finaux
● %e %E : notation exponentielle
paumier@univ-mlv.fr 6
Formats spéciaux
paumier@univ-mlv.fr 7
Le gabarit
● %.3f : 3 décimales
● règle d'arrondi
● compatible avec un gabarit
paumier@univ-mlv.fr 9
Gabarit et précision variables
paumier@univ-mlv.fr 10
Signes des nombres
paumier@univ-mlv.fr 11
sprintf
paumier@univ-mlv.fr 12
scanf
paumier@univ-mlv.fr 13
sscanf
$>./a.out
Tue 17 Jul 2007
paumier@univ-mlv.fr 14
getchar
● int getchar();
● équivalent à scanf("%c",&c);
● renvoie le caractère lu ou EOF en cas
d'erreur
● plus lisible
● plus rapide, car pas de format à analyser
paumier@univ-mlv.fr 15
Les fichiers
paumier@univ-mlv.fr 16
Qu'est-ce qu'un fichier ?
paumier@univ-mlv.fr 17
Les primitives
● primitives systèmes:
int open(const char* pathname,int flags,mode_t mode);
int close(int fd);
ssize_t read(int fd,void* buf,size_t count);
ssize_t write(int fd,const void* buf,size_t count);
paumier@univ-mlv.fr 18
E/S civilisées
paumier@univ-mlv.fr 19
Ouvrir un fichier
● options de fopen:
"r" : lecture seule
"w" : écriture écriture seule (fichier créé si
nécessaire, écrasé si existant)
"a" : ajout en fin (fichier créé si nécessaire)
● par défaut, opérations en mode texte
– différences pour les retours à la ligne
suivants les systèmes
● toujours tester la valeur de retour
paumier@univ-mlv.fr 20
Ouvrir un fichier
paumier@univ-mlv.fr 21
Ouvrir un fichier
paumier@univ-mlv.fr 22
Fermer un fichier
● fclose(f);
● f doit être non NULL
● f doit représenter une adresse valide
● f ne doit pas avoir déjà été fermé
● tout fichier ouvert doit être fermé
paumier@univ-mlv.fr 23
E/S binaires
size_t fread(void* ptr,
size_t size,
size_t n,
FILE *f);
paumier@univ-mlv.fr 24
E/S binaires
paumier@univ-mlv.fr 25
E/S binaires
size_t fwrite(const void* ptr,
size_t size,
size_t n,
FILE* f);
paumier@univ-mlv.fr 26
E/S binaires
paumier@univ-mlv.fr 27
E/S formatées
paumier@univ-mlv.fr 29
ungetc
paumier@univ-mlv.fr 30
fgets
paumier@univ-mlv.fr 31
fputs
paumier@univ-mlv.fr 32
Fin de fichier en lecture
paumier@univ-mlv.fr 33
Fin de fichier en lecture
● différence d'efficacité
● au programmeur de choisir
● on peut mélanger
int main(int argc,char* argv[]) {
int i=708077092;
FILE* f=fopen("text","w");
$>./a.out
if (f==NULL) exit(1); $>cat text
fprintf(f,"%d\n",i);
fclose(f); 708077092
f=fopen("bin","wb"); $>cat bin
if (f==NULL) exit(1);
fwrite(&i,sizeof(int),1,f); $f4*$>
fclose(f);
return 0;
}
paumier@univ-mlv.fr 35
Sérialisation
paumier@univ-mlv.fr 36
Endianness
paumier@univ-mlv.fr 37
Encodage de texte
paumier@univ-mlv.fr 38
Positionnement
● int fseek(FILE* f,long offset,int whence);
● modifie la position courante dans le
fichier
● position = offset + whence
● whence peut valoir:
– SEEK_SET : début du fichier
– SEEK_CUR : position courante
– SEEK_END : fin du fichier
paumier@univ-mlv.fr 39
Positionnement
long filesize(FILE* f) {
long old_pos=ftell(f);
fseek(f,0,SEEK_END);
long size=1+ftell(f); +1 car les positions vont
fseek(f,old_pos,SEEK_SET); de 0 à taille-1
return size;
}
paumier@univ-mlv.fr 40
Positionnement
paumier@univ-mlv.fr 41
Renommer et détruire
● int rename(const char* oldpath,const char*
newpath);
● int remove(const char* pathname);
● ces fonctions (stdio.h) fonctionnement
aussi sur les répertoires
● elles renvoient 0 si OK, -1 si erreur
paumier@univ-mlv.fr 42
Créer un répertoire
● int mkdir(const char* pathname,mode_t mode);
●
mode spécifie les droits du répertoire
● ces droits seront combinés avec le umask
● fonction non portable!
● nécessite sys/types.h sys/stat.h
paumier@univ-mlv.fr 43
Noms de fichiers
paumier@univ-mlv.fr 44
Noms de fichiers
paumier@univ-mlv.fr 46
Problèmes de tempnam
paumier@univ-mlv.fr 47
Version sécurisée
paumier@univ-mlv.fr 48
Version sécurisée
paumier@univ-mlv.fr 49
Bufferisation des E/S
● 3 modes:
– bufferisation totale
– bufferisation par lignes
– pas de bufferisation
paumier@univ-mlv.fr 50
Bufferisation des E/S
● bufferisation totale:
void setbuf(FILE* f,char* buf);
void setbuffer(FILE* f,char* buf,int size);
● avec setbuf, la taille est fixée à BUFSIZ
paumier@univ-mlv.fr 51
Bufferisation des E/S
paumier@univ-mlv.fr 52
Bufferisation des E/S
● bufferisation générale:
int setvbuf(FILE* f,char* buf,int mode,
size_t size);
● mode:
– _IONBF : non bufferisé
– _IOLBF : bufferisé par lignes
– _IOFBF : bufferisé
● size: taille du buffer
● renvoie 0 si OK, EOF sinon
paumier@univ-mlv.fr 53