Share via


_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" );
}
  

Équivalent .NET Framework

Voir aussi

Référence

E/S de flux

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

fopen, _wfopen

freopen, _wfreopen

_open, _wopen

_setmode

_sopen, _wsopen