fopen() : Ouvre un flux.
BUFSIZ : Taille, par défaut, du tampon associé à un fichier
Prototype:
FILE *fopen(const char *nom_fichier, char *mode);
dans: <stdio.h>
Description:
fopen ouvre le fichier nommé nom_fichier et lui associe un flux.
L'argument mode de cette fonction est une chaîne; voici la liste de ses valeurs possibles et leur signification :
- r Ouverture en lecture seule.
Erreur si le fichier n'existe pas, ou si vous n'avez pas accès au répertoire, ou si vous n'avez pas accès en lecture sur ce fichier.
- w Création en écriture seule (écrase un fichier Erreur si l'indication de réperoire est incorrecte, ou si vous n'avez pas accès au répertoire.
- a Ouverture en ajout en fin du fichier ou création en Erreur si l'indication de réperoire est incorrecte, si vous n'avez pas accès au répertoire, ou si vous n'avez pas l'autorisation d'écriture sur le le fichier.
- r+ Ouverture pour mise à jour d'un fichier existant (lecture et écriture).
Erreur si le fichier n'existe pas, ou si vous n'avez pas accès au répertoire, ou si vous n'avez pas accès en lecture et en écriture sur ce fichier.
- w+ Création d'un nouveau fichier en lecture et en écriture. Ecrase un fichier existant de même nom.
Erreur si le fichier n'existe pas, ou si vous n'avez pas accès au répertoire, ou si vous n'avez pas accès en lecture et en écriture sur ce fichier.
- a+ Ouverture (ou création si le fichier n'existe pas) pour mise à jour à la fin du fichier (lecture et écriture).
Erreur si le fichier n'existe pas, ou si vous n'avez pas accès au répertoire, ou si vous n'avez pas accès en lecture et en écriture sur ce fichier.
Pour préciser le mode de translation du fichier à ouvrir ou à créer, il suffit d'ajouter une lettre particulière à la valeur de mode : un t pour le mode texte (rt, w+t, etc.) et un b pour le mode binaire (wb, a+b, etc.).
fopen() autorise aussi l'insertion du t ou du b entre la lettre et le signe +; par exemple, rt+ est equivalent a r+t.
Lorsque l'argument type ne contient ni t ni b, le mode de translation est déterminé par la variable globale _fmode :
- si celle-ci vaut O_BINARY, les fichiers sont ouverts en mode binaire,
- si elle vaut O_TEXT, ils le sont en mode texte.
Ces constantes symboliques O_... sont définies dans fcntl.h.
Quand un fichier est ouvert pour une mise à jour, le flux associé permet aussi bien des écritures que des lectures.
Une écriture ne peut cependant être suivie immediatement d'une lecture sans un repositionnement obtenu par un appel à fseek() ou à rewind(); de même, une lecture ne peut être suivie immediatement par une écriture sans un appel à une de ces deux fonctions (sauf si la lecture a atteint la fin du fichier).
BUFSIZ est défini dans le fichier <stdio.h>, et représente la taille du tampon de lecture ou d'écriture, pour les opérations d'entrées/sorties 'tamponnées' ou 'bufferisées'.
Cette taille est en rapport avec les tampons gérés par les primitives systèmes gérant les entrées/sorties.
Valeur renvoyée:
- NULL si l'opération demandée n'a pu être effectuée (voir plus loin) ou
- l'adresse servant à identifier le flux lors des opérations ultérieures.
Voir aussi:
Portabilité:
Exemple:
/* Programme de création d'une copie du fichier toto */
#define IN "toto"
#define OUT "toto.txt"
#include
int main (void) {
FILE *in, *out;
char car;
if ((in=fopen( IN, "rt")) == NULL) {
printf( "Impossible d'ouvrir %s en lecture.\n", IN);
return 1;
}
if ((out = fopen( OUT, "wt")) == NULL) {
printf( "Impossible d'ouvrir %s en écriture.\n", OUT);
return 2;
}
/* Parcours du fichier en lecture, et recopie */
car = fgetc(in);
while (!feof(in)) {
fputc( car, out);
car = fgetc(in);
}
fclose(in);
fclose(out);
return 0;
}