_fsopen, _wfsopen

 

Pour obtenir la dernière documentation sur Visual Studio 2017, consultez Documentation Visual Studio 2017.

Ouvre un flux avec le 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é.

Chacune de ces fonctions retourne un pointeur vers le flux. Une valeur de pointeur null indique une erreur. Si filename ou mode est NULL ou une chaîne vide, ces fonctions appellent 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 les autres codes d’erreur, consultez la page _doserrno, errno, _sys_errlist et _sys_nerr.

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.

TermeDé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"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+"Ouvre pour l'écriture et l'ajout ; crée d'abord le fichier s'il n'existe pas.

Utilisez les types "w" et "w+" avec précaution, car ils peuvent détruire les fichiers existants.

Quand 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 de fseek ou 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 pas être remplacées. Quand 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 mise à jour). Toutefois, lorsque vous basculez entre lecture et écriture, il doit y avoir une intervention fsetpos, fseek, ou rembobiner opération. 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.

TermeDéfinition
tOuvre un fichier en mode texte (traduit). Dans ce mode, les combinaisons retour chariot-saut de ligne sont traduites en flux d'une ligne (saut de ligne) en entrée, et les caractères de saut de ligne sont traduits en combinaisons retour chariot/saut de 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. En effet, l'utilisation des fonctions fseek et ftell pour se déplacer dans un fichier qui se termine par un Ctrl+Z peut provoquer un comportement incorrect de fseek vers la fin du fichier.
bOuvre un fichier en mode binaire (non traduit) ; les traductions ci-dessus sont supprimées.
SIndique que la mise en cache est optimisée pour, mais non limitée à, l'accès séquentiel à partir du disque.
RIndique que la mise en cache est optimisée pour, mais non limitée à, l'accès aléatoire à partir du disque.
TSpécifie un fichier comme temporaire. Si possible, il n'est pas vidé sur disque.
DSpécifie un fichier comme temporaire. Il est supprimé lorsque le dernier pointeur de fichier est fermé.

Si t ou b n'est pas spécifié 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 description des modes texte et binaire, consultez texte et e/s de fichier en Mode binaire.

L'argument shflag est une expression constante constituée de l'une des constantes de manifeste suivantes, définies dans Share.h.

TermeDéfinition
_SH_COMPATDéfinit le mode de compatibilité pour les applications 16 bits.
_SH_DENYNOAutorise l'accès en lecture et en écriture.
_SH_DENYRDRefuse l'accès en lecture au fichier.
_SH_DENYRWRefuse l'accès en lecture et en écriture au fichier.
_SH_DENYWRRefuse 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
FonctionEn-tête requisEn-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.
// 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.  

Flux d’e/s
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen

Afficher: