_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_errlistet _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 fseekrewind 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 _fmodeen 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, consultez FILE_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 combiner TD 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 routine de texte générique

Tchar.h Routine _UNICODE et _MBCS non défini _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