_sopen_s
, _wsopen_s
Apre un file per la condivisione. Queste versioni di e _wsopen
dispongono di miglioramenti per_sopen
la sicurezza, come descritto in Funzionalità di sicurezza in CRT.
Sintassi
errno_t _sopen_s(
int* pfh,
const char *filename,
int oflag,
int shflag,
int pmode
);
errno_t _wsopen_s(
int* pfh,
const wchar_t *filename,
int oflag,
int shflag,
int pmode,
);
Parametri
pfh
Handle di file o -1 se si verifica un errore.
filename
Nome del file.
oflag
Tipo di operazioni consentite.
shflag
Tipo di condivisione consentita.
pmode
Impostazione di autorizzazione.
Valore restituito
Un valore restituito diverso da zero indica un errore, nel qual caso errno
viene impostato su uno dei valori seguenti.
Valore errno |
Condizione |
---|---|
EACCES |
Il percorso specificato è una directory o il file è di sola lettura, ma è stata tentata un'operazione di apertura in scrittura. |
EEXIST |
Sono stati specificati i flag _O_CREAT e _O_EXCL , ma filename esiste già. |
EINVAL |
oflag , shflag o pmode sono argomenti non validi oppure pfh o filename era un puntatore null. |
EMFILE |
Non sono disponibili altri descrittori di file. |
ENOENT |
File o percorso non trovato. |
Se alla funzione viene passato un argomento non valido, viene richiamato il gestore di parametri non validi, come descritto in Convalida dei parametri. Se l'esecuzione può continuare, errno
viene impostata su EINVAL
e EINVAL
viene restituito .
Per altre informazioni su questi e altri codici restituiti, vedere errno
, _doserrno
, _sys_errlist
e _sys_nerr
.
Se si verifica un errore, viene restituito -1 tramite pfh
(a meno che non pfh
sia un puntatore Null).
Osservazioni:
La funzione _sopen_s
apre il file specificato da filename
e prepara il file per la lettura o la scrittura condivisa, come definito da oflag
e shflag
. _wsopen_s
è una versione a caratteri wide di _sopen_s
; l'argomento filename
in _wsopen_s
è una stringa di caratteri wide. In caso contrario,_wsopen_s
e _sopen_s
si comportano in modo identico.
Per impostazione predefinita, lo stato globale di questa funzione è limitato all'applicazione. Per modificarlo, vedere Stato globale in CRT.
Mapping di routine di testo generico
Tchar.h routine |
_UNICODE e _MBCS non definito |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
L'espressione oflag
integer viene formata combinando una o più costanti manifesto, definite in <fcntl.h>
. Quando due o più costanti formano l'argomento oflag
, vengono combinate con l'operatore OR bit per bit ( |
).
Costante oflag |
Comportamento |
---|---|
_O_APPEND |
Sposta il puntatore a file alla fine del file prima di ogni operazione di scrittura. |
_O_BINARY |
Apre il file in modalità binaria (non convertita). Per una descrizione della modalità binaria, vedere fopen . |
_O_CREAT |
Crea e apre un nuovo file per la scrittura. Non ha effetto se il file specificato da filename esiste. L'argomento pmode è obbligatorio quando è specificato _O_CREAT . |
_O_CREAT | _O_SHORT_LIVED |
Crea un file come temporaneo e, se possibile, non scarica su disco. L'argomento pmode è obbligatorio quando è specificato _O_CREAT . |
_O_CREAT | _O_TEMPORARY |
Crea un file come temporaneo; il file viene eliminato quando l'ultimo descrittore del file viene chiuso. L'argomento pmode è obbligatorio quando è specificato _O_CREAT . Per mantenere il comportamento legacy per la compatibilità delle app, gli altri processi non impediscono l'eliminazione di questo file. |
_O_CREAT | _O_EXCL |
Restituisce un errore se un file specificato da filename esiste. Si applica solo se usato con _O_CREAT . |
_O_NOINHERIT |
Impedisce la creazione di un descrittore di file condiviso. |
_O_RANDOM |
Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso casuale dal disco. |
_O_RDONLY |
Apre un file per la sola lettura. Non è possibile specificare con _O_RDWR o _O_WRONLY . |
_O_RDWR |
Apre un file per lettura e scrittura. Non è possibile specificare con _O_RDONLY o _O_WRONLY . |
_O_SEQUENTIAL |
Specifica che la memorizzazione nella cache è ottimizzata, ma non limitata, per l'accesso sequenziale dal disco. |
_O_TEXT |
Apre un file in modalità testo ANSI (tradotto). Per altre informazioni, vedere I/O del file in modalità testo e binario e fopen .) |
_O_TRUNC |
Apre un file e lo tronca a lunghezza zero; il file deve disporre dell'autorizzazione di scrittura. Non è possibile specificare con _O_RDONLY . _O_TRUNC usato con _O_CREAT apre un file esistente o crea un nuovo file. Nota: il _O_TRUNC flag elimina definitivamente il contenuto del file specificato. |
_O_WRONLY |
Apre un file per la sola scrittura. Non è possibile specificare con _O_RDONLY o _O_RDWR . |
_O_U16TEXT |
Apre un file in modalità Unicode UTF-16. |
_O_U8TEXT |
Apre un file in modalità Unicode UTF-8. |
_O_WTEXT |
Apre un file in modalità Unicode. |
Per specificare la modalità di accesso al file, è necessario specificare _O_RDONLY
, _O_RDWR
o _O_WRONLY
. Non esiste alcun valore predefinito per la modalità di accesso.
Quando un file viene aperto in modalità Unicode usando _O_WTEXT
, _O_U8TEXT
o _O_U16TEXT
, le funzioni di input traducono i dati letti dal file in dati UTF-16 archiviati come tipo wchar_t
. Le funzioni che scrivono in un file aperto in modalità Unicode prevedono buffer contenenti dati UTF-16 archiviati come tipo wchar_t
. Se il file viene codificato come UTF-8, i dati UTF-16 vengono convertiti in UTF-8 quando vengono scritti. Il contenuto con codifica UTF-8 del file viene convertito in UTF-16 quando viene letto. Un tentativo di lettura o scrittura di un numero dispari di byte in modalità Unicode causerà un errore di convalida del parametro . Per leggere o scrivere dati archiviati nel programma come UTF-8, usare una modalità file di testo o binaria al posto della modalità Unicode. L'utente è responsabile di qualsiasi traduzione di codifica necessaria.
Se _sopen_s
viene chiamato con _O_WRONLY | _O_APPEND
(modalità di aggiunta) e _O_WTEXT
, _O_U16TEXT
o _O_U8TEXT
, tenterà prima di tutti di aprire il file per la lettura e la scrittura, di leggere l'indicatore di ordine dei byte e quindi di riaprirlo per la sola scrittura. Se l'apertura del file per lettura e scrittura ha esito negativo, il file verrà aperto per la sola lettura e verrà usato il valore predefinito per l'impostazione della modalità Unicode.
L'argomento shflag
è un'espressione costante costituita da una delle costanti manifesto seguenti, definite in <share.h>
.
Costante shflag |
Comportamento |
---|---|
_SH_DENYRW |
Nega l'accesso in lettura e scrittura a un file. |
_SH_DENYWR |
Nega l'accesso in scrittura a un file. |
_SH_DENYRD |
Nega l'accesso in lettura a un file. |
_SH_DENYNO |
Consente l'accesso in lettura e scrittura. |
L'argomento pmode
è sempre necessario, a differenza di _sopen
. Quando si specifica _O_CREAT
, se il file non esiste, pmode
specifica le impostazioni di autorizzazione del file, che vengono impostate quando il nuovo file viene chiuso la prima volta. In caso contrario pmode
viene ignorato. pmode
è un'espressione integer che contiene una o entrambe le _S_IWRITE
costanti del manifesto e _S_IREAD
, definite in <sys\stat.h>
. Quando vengono fornite entrambe le costanti, vengono combinate con l'operatore OR bit per bit. Il significato di pmode
è indicato di seguito.
pmode |
significato |
---|---|
_S_IREAD |
Solo lettura consentita. |
_S_IWRITE |
Scrittura consentita. (In effetti, consente la lettura e la scrittura) |
_S_IREAD | _S_IWRITE |
Lettura e scrittura consentite. |
Se non viene concessa l'autorizzazione di scrittura, il file è di sola lettura. Nel sistema operativo Windows tutti i file sono leggibili; non è possibile concedere l'autorizzazione di sola scrittura. Di conseguenza, le modalità _S_IWRITE
e _S_IREAD | _S_IWRITE
sono equivalenti.
_sopen_s
applica la maschera corrente di autorizzazione file a pmode
prima di impostare le autorizzazioni. Per informazioni, vedere _umask
.
Requisiti
Funzione | Intestazione obbligatoria | Intestazione facoltativa |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h> , <sys\types.h> , <sys\stat.h> <share.h> |
_wsopen_s |
<io.h> oppure <wchar.h> |
<fcntl.h> , <sys/types.h> , <sys/stat.h> <share.h> |
_sopen_s
e _wsopen_s
sono estensioni Microsoft. Per altre informazioni sulla compatibilità, vedere Compatibility (Compatibilità).
Esempio
Vedere l'esempio per _locking
.
Vedi anche
I/O di basso livello
_close
_creat
, _wcreat
fopen
, _wfopen
_fsopen
, _wfsopen
_open
, _wopen