Condividi tramite


_fsopen, _wfsopen

Apre un flusso con la condivisione di file.

Sintassi

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 è o mode una NULL stringa vuota, queste funzioni richiamano il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, queste funzioni restituiscono NULL e impostano errno su EINVAL.

Per altre informazioni su questi e altri codici di errore, vedere errno, _doserrno, _sys_errliste _sys_nerr.

Osservazioni:

La funzione _fsopen apre il file specificato in base al filename come un flusso e prepara il file per una successiva lettura o scrittura condivisa, come definito dal modo e dagli argomenti shflag. _wfsopen è una versione a caratteri wide di _fsopen. Gli argomenti per filename e mode per _wfsopen sono stringhe a caratteri wide. In caso contrario,_wfsopen e _fsopen si comportano in modo identico.

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 è stato trovato, la _fsopen chiamata non riesce.
"w" Apre un file vuoto per la scrittura. Se il file specificato esiste, il contenuto viene eliminato in modo permanente.
"a" Apre 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+" Apre per la lettura e l'aggiunta; crea prima il file se non esiste.

Usare i tipi "w" e "w+" con attenzione, in quanto possono distruggere i file esistenti.

Quando un file viene aperto con il tipo di accesso "" o "aa+", tutte le operazioni di scrittura vengono eseguite alla fine del file. Il puntatore del file può essere riposizionato usando fseek o rewind, ma viene sempre spostato di nuovo alla fine del file prima di eseguire qualsiasi operazione di scrittura. Di conseguenza, i dati esistenti non possono essere sovrascritti. Quando viene specificato il tipo di accesso "r+", "w+" o "",a+ la lettura e la scrittura sono consentite (si dice che il file sia aperto per l'aggiornamento). Tuttavia, quando si passa dalla lettura alla scrittura, deve essere presente un'operazione , fseeko rewind intercorrentefsetpos. È possibile specificare la posizione corrente per l'operazione fsetpos o fseek, se necessario. Oltre ai valori specificati sopra, è possibile includere uno dei caratteri seguenti in mode per specificare la modalità di conversione per le nuove righe e per la gestione file.

Termine Definizione
t Apre un file in modalità testo (convertito). In questa modalità, le combinazioni di avanzamento riga ritorno a capo (CR-LF) vengono convertite in feed a riga singola (LF) in caratteri di input e LF vengono convertite in combinazioni CR-LF nell'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. Viene rimosso perché l'uso fseek e ftell lo spostamento all'interno di un file che termina con CTRL+Z potrebbe causare fseek un comportamento non corretto vicino alla fine del file.
b Apre un file in modalità binaria (nessuna conversione); le conversioni sopra indicate vengono eliminate.
D Specifica un file temporaneo eliminato quando viene chiuso l'ultimo puntatore al file.
R Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso casuale dal disco.
S Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso sequenziale dal disco.
T Specifica un file che non viene scritto su disco a meno che non sia richiesto un utilizzo elevato di memoria.

Se t o b non viene specificato in mode, la modalità di conversione è definita dalla variabile _fmodein modalità predefinita . Se t o b è il prefisso dell'argomento, la funzione ha esito negativo e restituisce NULL. Per una descrizione delle modalità di testo e binario, vedere I/O di file in modalità testo e binario.

Informazioni su T e D:

  • T evita di scrivere il file su disco, purché non sia necessaria una pressione di memoria. Per altre informazioni, vedere FILE_ATTRIBUTE_TEMPORARY in Costanti attributo file e anche questo post di blog È solo temporaneo.
  • D specifica un file normale scritto su disco. La differenza è che viene eliminata automaticamente quando viene chiusa. È possibile combinare TD per ottenere entrambe le semantiche.

_fsopen e _wfsopen sono varianti specifiche di Microsoft di fopen. Non fanno parte dello standard ANSI. Per una funzione più portatile e sicura, se non è necessaria la condivisione di file, prendere in considerazione _wfopen_s o fopen_s.

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

Termine Definizione
_SH_DENYNO Consente l'accesso in lettura e scrittura.
_SH_DENYRD Nega l'accesso in lettura al file.
_SH_DENYRW Nega l'accesso in lettura e scrittura al file.
_SH_DENYWR Nega l'accesso in scrittura al file.

Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificare questo comportamento, vedere Stato globale in CRT.

Mapping di routine di testo generico

Tchar.h routine _UNICODE e _MBCS non definito _MBCS definito _UNICODE definito
_tfsopen _fsopen _fsopen _wfsopen

Requisiti

Funzione Intestazione obbligatoria Intestazioni facoltative
_fsopen <stdio.h> <share.h>

Per la costante manifesto per il parametro shflag.
_wfsopen <stdio.h> oppure <wchar.h> <share.h>

Per la costante 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" );
}
No one else in the network can write to this file until we are done.

Vedi anche

I/O di flusso
fclose, _fcloseall
_fdopen, _wfdopen
ferror
_fileno
fopen, _wfopen
freopen, _wfreopen
_open, _wopen
_setmode
_sopen, _wsopen