Condividi tramite


_fsopen, _wfsopen

Apre un flusso con condivisione di file.

FILE *_fsopen( 
   const char *filename,
   const char *mode,
   int shflag 
);
FILE *_wfsopen( 
   const wchar_t *filename,
   const wchar_t *mode,
   int shflag 
);

Parametri

  • filename
    Nome del file da aprire.

  • mode
    Tipo di accesso consentito.

  • shflag
    Tipo di condivisione consentita.

Valore restituito

Ognuna di queste funzioni restituisce un puntatore al flusso. Un valore di puntatore Null indica un errore. Se filename o mode è NULL o una stringa vuota, queste funzioni invocano il gestore di parametro non valido, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono NULL e impostano errno su EINVAL.

Per ulteriori informazioni su questi e altri codici, vedere _doserrno, errno, _sys_errlist, e _sys_nerr.

Note

La funzione _fsopen apre il file specificato da filename come flusso e prepara il file per una lettura o scrittura successiva condivisa, come definito dalla modalità e dagli argomenti di shflag. _wfsopen è una versione a caratteri "wide" di _fsopen; Gli argomenti filename e mode di _wfsopen sono stringhe a caratteri "wide". _wfsopen e _fsopen si comportano in modo identico in caso contrario.

La stringa di caratteri mode specifica il tipo di accesso richiesto per il file, come mostrato nella tabella seguente.

Termine

Definizione

"r"

Viene aperto per la lettura. Se il file non esiste o non viene trovato, la chiamata a _fsopen avrà esito negativo.

"w"

Apre un file vuoto per la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.

"a"

Verrà aperto per la scrittura alla fine del file (aggiunta); crea prima il file se non esiste.

"r+"

Viene aperto per la lettura e la scrittura. (Il file deve esistere.)

"w+"

Apre un file vuoto per la lettura e la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.

"a+"

Verrà aperto per la lettura e l'aggiunta; crea prima il file se non esiste.

Utilizzare con attenzione i tipi "w+" e "w", in quanto è possibile distruggere file esistenti.

Quando un file viene aperto con il tipo di accesso "a" o "a+", tutte le operazioni di scrittura si verificano alla fine del file. Il puntatore del file può essere riposizionato utilizzando fseek o rewind, ma viene sempre spostato di nuovo alla fine del file prima dell'esecuzione di qualsiasi operazione di scrittura. Pertanto, i dati esistenti non possono essere sovrascritti. Quando il tipo di accesso "r+", "w+" o "a+" viene specificato, sono consentite sia la lettura che la scrittura (il file viene definito aperto per l'aggiornamento). Tuttavia, quando si passa da lettura e scrittura, devono esserci delle operazione intermedie fsetpos, fseek o rewind. La posizione corrente può essere specificata per l'operazione fseek o fsetpos. Oltre ai valori precedenti, uno dei seguenti caratteri può essere incluso nella stringa mode per specificare la modalità di traduzione per le nuove righe e la gestione del file.

Termine

Definizione

t

Apre un file in modalità testo (convertito). In questa modalità, le combinazioni ritorno a capo-avanzamento di riga (CR-LF) vengono convertite in singoli avanzamenti riga (LF) al momento dell'input e i caratteri di avanzamento riga vengono convertiti in combinazioni di ritorno a capo-avanzamento di riga (CR-LF) al momento dell'output. Inoltre, CTRL+Z viene interpretato nell'input come carattere di fine file. Nei file aperti per la lettura o lettura/scrittura, _fsopen verifica la presenza di una combinazione CTRL+Z alla fine del file e la rimuove, se possibile. Questa operazione viene eseguita perché l'utilizzo di fseek e ftell per spostarsi all'interno di un file che termina con un CTRL+Z potrebbe causare un comportamento non corretto di fseek in prossimità della fine del file.

b

Apre un file in modalità binaria (non tradotta); le conversioni precedenti vengono eliminate.

S

Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso sequenziale dal disco.

R

Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso casuale dal disco.

T

Specifica un file come temporaneo. Se possibile, non viene scaricato su disco.

D

Specifica un file come temporaneo. Viene eliminato quando viene chiuso l'ultimo puntatore del file.

Se t o b non è specificato in mode, la modalità di traduzione è definita dalla variabile globale predefinita _fmode. Se t o b è il prefisso dell'argomento, la funzione ha esito negativo e restituisce NULL. Per una descrizione della modalità binaria e di testo, vedere I/O dei File in modalità di Testo o Binaria.

L'argomento shflag è un'espressione costante costituita da una delle seguenti costanti manifesto, definite in Share.h.

Termine

Definizione

_SH_COMPAT

Imposta la modalità di compatibilità per le applicazioni a 16 bit.

_SH_DENYNO

Consente l'accesso in lettura e scrittura.

_SH_DENYRD

Nega l'accesso al file in lettura.

_SH_DENYRW

Nega l'accesso in lettura/scrittura al file.

_SH_DENYWR

Nega l'accesso in scrittura al file.

Mapping di routine di testo generico

Routine Tchar.h

_UNICODE e _MBCS non definiti

_MBCS definito

_UNICODE definito

_tfsopen

_fsopen

_fsopen

_wfsopen

Requisiti

Funzione

Intestazione obbligatoria

Intestazioni facoltative

_fsopen

<stdio.h>

<share.h>

Per la costante del manifesto per il parametro shflag.

_wfsopen

<stdio.h> o <wchar.h>

<share.h>

Per la costante del manifesto per il parametro shflag.

Esempio

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

Equivalente .NET Framework

Vedere anche

Riferimenti

I/O di flusso

fclose, _fcloseall

_fdopen, _wfdopen

ferror

_fileno

fopen, _wfopen

freopen, _wfreopen

_open, _wopen

_setmode

_sopen, _wsopen