_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_errlist
e _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 "a
a+
", 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 , fseek
o 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 _fmode
in 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, vedereFILE_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 combinareTD
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