_fsopen, _wfsopen
Ouvre un flux de données avec partage de fichiers.
FILE *_fsopen(
const char *filename,
const char *mode,
int shflag
);
FILE *_wfsopen(
const wchar_t *filename,
const wchar_t *mode,
int shflag
);
Paramètres
filename
Nom du fichier à ouvrir.mode
Type d'accès autorisé.shflag
Type de partage autorisés.
Valeur de retour
Chacune de ces fonctions retourne un pointeur vers le flux de données. Une valeur de pointeur null indique une erreur. Si filename ou mode est NULL ou est une chaîne vide, ces fonctions invoquent le gestionnaire de paramètre non valide, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, ces fonctions retournent NULL et définissent errno avec la valeur EINVAL.
Pour plus d'informations sur ces codes d'erreur et d'autres, consultez _doserrno, errno, _sys_errlist et _sys_nerr.
Notes
La fonction _fsopen ouvre le fichier spécifié par filename en tant que flux de données et prépare le fichier pour la lecture suivante partagée ou l'écriture, comme défini par le mode et les arguments shflag. _wfsopen est une version à caractères larges de _fsopen; les arguments filename et mode vers _wfsopen sont des chaînes de caractères larges. _wfsopen et _fsopen se comportent sinon de manière identique.
La chaîne de caractères mode spécifie le type d'accès demandé pour le fichier, comme indiqué dans le tableau suivant.
Terme |
Définition |
---|---|
"r" |
Ouvre pour l'accès en lecture. Si le fichier n'existe pas ou est introuvable, l'appel à _fsopen échoue. |
"w" |
Ouvre un fichier vide pour l'accès en écriture. Si le fichier spécifié existe, son contenu est détruit. |
"a" |
S'ouvre pour écrire à la fin du fichier (ajouter) ; crée le fichier d'abord s'il n'existe pas. |
"r+" |
Ouvre pour l'accès en lecture et en écriture. (Le fichier doit exister.) |
"w+" |
Ouvre un fichier vide pour l'accès en lecture et en écriture. Si le fichier spécifié existe, son contenu est détruit. |
"a+" |
Ouvre pour la lecture et l'ajout ; crée le fichier d'abord s'il n'existe pas. |
Utilisez les types "w" et "w+" avec précaution, car ils peuvent détruire des fichiers existants.
Lorsqu'un fichier est ouvert avec le type d'accès "a" ou "a+", toutes les opérations d'écriture ont lieu à la fin du fichier. Le pointeur de fichier peut être repositionné à l'aide de fseek ou de rewind, mais il est toujours redéplacé à la fin du fichier avant toute opération d'écriture. Par conséquent, les données existantes ne peuvent être remplacées. Lorsque le type d'accès "r+", "w+" ou "a+" est spécifié, la lecture et l'écriture sont autorisées (on dit que le fichier est ouvert pour la mise à jour ). Toutefois, lorsque vous basculez entre la lecture et l'écriture, il doit y avoir une intervention de fsetpos, fseek, ou une opération de rembobinage. La position actuelle peut être spécifiée pour une opération fsetpos ou de fseek, le cas échéant. Outre les valeurs ci-dessus, l'un des caractères suivants peut être inclus dans mode pour spécifier le mode de traduction pour les nouvelles lignes, et pour la gestion de fichier.
Terme |
Définition |
---|---|
t |
Ouvre un fichier en mode texte (traduit). Dans ce mode, les combinaisons de saut de ligne-retour de chariot (CR-LF) sont traduites en sauts de ligne uniques (LF) en entrée et les caractères LF sont traduits en combinaisons CR-LF en sortie. En outre, CTRL+Z est interprété comme caractère de fin de fichier sur l'entrée. Dans les fichiers ouverts en lecture/écriture, _fsopen vérifie la présence de Ctrl+Z à la fin du fichier et le supprime, si possible. Cette opération est effectuée car l'utilisation de fseek et de ftell pour se déplacer dans un fichier qui se termine par Ctrl+Z peut provoquer un comportement incorrect de fseek près de la fin du fichier. |
b |
Ouvre un fichier en mode (non traduit) binaire ; les traductions ci-dessus sont supprimées. |
S |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès séquentiel à partir du disque. |
R |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès aléatoire à partir du disque. |
T |
Spécifie un fichier comme temporaire. Si possible, il n'est pas vidé sur disque. |
D |
Spécifie un fichier comme temporaire. Il est supprimé lorsque le dernier pointeur de fichier est fermé. |
Si t ou b n'est pas donné dans mode, le mode de traduction est défini par la variable de mode par défaut _fmode. Si t ou b a l'argument comme préfixe, la fonction échoue et retourne NULL. Pour une discussion des modes de texte et binaire, consultez E/S de fichier du mode de texte et binaire.
L'argument shflag est une expression constante se composant de l'une des constantes manifestes suivantes, défini dans Share.h.
Terme |
Définition |
---|---|
_SH_COMPAT |
Définit le mode de compatibilité pour les applications 16 bits. |
_SH_DENYNO |
Accorde l'accès en lecture et en écriture. |
_SH_DENYRD |
Refuse l'accès en lecture au fichier. |
_SH_DENYRW |
Refuse l'accès en lecture et en écriture au fichier. |
_SH_DENYWR |
Refuse l'accès en écriture au fichier. |
Mappages de routines de texte générique
Routine Tchar.h |
_UNICODE et _MBCS non définis |
_MBCS défini |
_UNICODE défini |
---|---|---|---|
_tfsopen |
_fsopen |
_fsopen |
_wfsopen |
Configuration requise
Fonction |
En-tête requis |
En-têtes facultatifs |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> Pour la constante manifeste pour le paramètre shflag. |
_wfsopen |
<stdio.h> ou <wchar.h> |
<share.h> Pour la constante manifeste pour le paramètre shflag. |
Exemple
// crt_fsopen.c
#include <stdio.h>
#include <stdlib.h>
#include <share.h>
int main( void )
{
FILE *stream;
// Open output file for writing. Using _fsopen allows us to
// ensure that no one else writes to the file while we are
// writing to it.
//
if( (stream = _fsopen( "outfile", "wt", _SH_DENYWR )) != NULL )
{
fprintf( stream, "No one else in the network can write "
"to this file until we are done.\n" );
fclose( stream );
}
// Now others can write to the file while we read it.
system( "type outfile" );
}