_fsopen
, _wfsopen
Ouvre un flux avec le partage de fichiers.
Syntaxe
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é.
Valeur retournée
Chacune de ces fonctions retourne un pointeur vers le flux. Une valeur de pointeur null indique une erreur. Si filename
ou mode
est ou une NULL
chaîne vide, ces fonctions appellent le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. 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 codes d’erreur, consultez errno
, _doserrno
, _sys_errlist
et _sys_nerr
.
Notes
La fonction _fsopen
ouvre le fichier spécifié par filename
en tant que flux et prépare le fichier à la lecture ou l'écriture partagée ultérieure, tel que défini par le mode et les arguments shflag
. _wfsopen
est une version à caractères larges de _fsopen
; les arguments filename
et mode
de _wfsopen
sont des chaînes à caractères larges. Sinon,_wfsopen
et _fsopen
se comportent de la même façon.
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 l’écriture à la fin du fichier (ajout) ; crée d’abord le fichier 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+ » |
S’ouvre pour la lecture et l’ajout ; crée d’abord le fichier s’il n’existe pas. |
Utilisez les types «w
» et «w+
» avec soin, car ils peuvent détruire les fichiers existants.
Lorsqu’un fichier est ouvert avec le type d’accès «a
» ou «a+
», toutes les opérations d’écriture se produisent à la fin du fichier. Le pointeur de fichier peut être repositionné à l’aide fseek
ou rewind
, mais il est toujours déplacé vers la fin du fichier avant l’exécution d’une opération d’écriture. Par conséquent, les données existantes ne peuvent pas être remplacées. Lorsque le type d’accès « », «w+
r+
» ou «a+
» est spécifié, la lecture et l’écriture sont autorisées (le fichier est dit ouvert pour la mise à jour). Toutefois, lorsque vous passez d’une lecture à l’autre, il doit y avoir une opération intermédiaire ou fseek
rewind
intermédiairefsetpos
. La position actuelle peut éventuellement être spécifiée pour l'opération fsetpos
ou fseek
. 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 la gestion des fichiers.
Terme | Définition |
---|---|
t |
Ouvre un fichier en mode texte (traduit). Dans ce mode, les combinaisons de flux de retour chariot (CR-LF) sont traduites en flux de ligne unique (LF) sur les caractères d’entrée et LF sont traduites en combinaisons CR-LF en sortie. De même, Ctrl+Z est interprété comme un caractère de fin de fichier en entrée. Dans les fichiers ouverts en lecture ou lecture/écriture, _fsopen recherche un Ctrl+Z à la fin du fichier et le supprime, si possible. Elle est supprimée, car l’utilisation fseek et ftell le déplacement dans un fichier se terminant par une touche Ctrl+Z peuvent entraîner fseek un comportement incorrect à proximité de la fin du fichier. |
b |
Ouvre un fichier en mode binaire (non traduit) ; les traductions ci-dessus sont supprimées. |
D |
Spécifie un fichier temporaire supprimé lorsque le dernier pointeur de fichier vers celui-ci est fermé. |
R |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès aléatoire à partir du disque. |
S |
Indique que la mise en cache est optimisée pour, mais non limitée à, l'accès séquentiel à partir du disque. |
T |
Spécifie un fichier qui n’est pas écrit sur le disque, sauf si la pression de la mémoire l’exige. |
Si t
le mode de traduction est b
défini ou non mode
, la variable _fmode
en mode par défaut est définie. Si t
ou b
a l'argument comme préfixe, la fonction échoue et retourne NULL
. Pour une discussion sur les modes texte et binaire, consultez E/S de fichier texte et binaire.
En ce qui concerne T
et D
:
T
évite d’écrire le fichier sur le disque tant que la pression de la mémoire ne le nécessite pas. Pour plus d’informations, consultezFILE_ATTRIBUTE_TEMPORARY
les constantes d’attributs de fichier et ce billet de blog uniquement temporaire.D
spécifie un fichier standard écrit sur le disque. La différence est qu’elle est automatiquement supprimée lorsqu’elle est fermée. Vous pouvez combinerTD
pour obtenir les deux sémantiques.
_fsopen
et _wfsopen
sont des variantes spécifiques à Microsoft de fopen
. Ils ne font pas partie de la norme ANSI. Pour une fonction plus portable et sécurisée, si vous n’avez pas besoin de partage de fichiers, envisagez _wfopen_s
ou fopen_s
.
L’argument shflag
est une expression constante composée de l’une des constantes manifeste suivantes, définies dans Share.h
.
Terme | Définition |
---|---|
_SH_DENYNO |
Autorise 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. |
Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.
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 |
Spécifications
Fonction | En-tête requis | En-têtes facultatifs |
---|---|---|
_fsopen |
<stdio.h> |
<share.h> Pour la constante de manifeste du paramètre shflag . |
_wfsopen |
<stdio.h> ou <wchar.h> |
<share.h> Pour la constante de manifeste du 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" );
}
No one else in the network can write to this file until we are done.
Voir aussi
E/S de flux
fclose
, _fcloseall
_fdopen
, _wfdopen
ferror
_fileno
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen
_setmode
_sopen
, _wsopen