_sopen_s, _wsopen_s
Apre un file per la condivisione.Queste sono versioni di _sopen e _wsopen con miglioramenti della sicurezza come descritto in Funzionalità di sicurezza in CRT.
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
[out] pfh
L'handle di file, o -1 in caso di errore.[in] filename
Nome file.[in] oflag
Tipo di operazioni consentite.[in] shflag
Tipo di condivisione consentita.[in] pmode
Impostazione di autorizzazione.
Valore restituito
Un valore restituito diverso da zero indica un errore, nel qual caso errno viene impostato su uno dei seguenti valori.
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, opmode sono argomenti non validi, o pfh o filename sono puntatori null.EMFILE
Non sono disponibili ulteriori descrittori di file.ENOENT
File o percorso non trovato.
Se viene passato alla funzione un argomento non valido, viene richiamato il gestore di parametro non valido, come descritto in Convalida dei parametri.Se l'esecuzione può continuare, errno è impostato su EINVAL e viene restituito EINVAL.
Per ulteriori informazioni su questi e altri codici restituiti, vedere _doserrno, errno, _sys_errlist, e _sys_nerr.
In caso di errore, verrà restituito -1 da pfh (a meno che pfh non sia un puntatore null).
Note
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 estesi di _sopen_s; l'argomento filename in _wsopen_s è una stringa di caratteri estesi._wsopen_s e _sopen_s si comportano in modo identico in caso contrario.
Mapping di routine a Testo generico
Routine Tchar.h |
_UNICODE e _MBCS non definiti |
_MBCS definito |
_UNICODE definito |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
L'espressione di valori integer oflag è costituita dalla combinazione di una o più costanti manifesto, definite nel file Fcntl.h.Quando due o più costanti costituiscono l'argomento oflag, vengono combinati con l'operatore OR bit per bit ( | ).
_O_APPEND
Riposiziona un puntatore a file alla fine del file prima di ogni operazione di scrittura._O_BINARY
Apre un file in modalità binaria (non convertita).(Vedere fopen per una descrizione della modalità binaria.)_O_CREAT
Crea ed apre un nuovo file in scrittura.Non ha effetto se il file specificato da filename esiste._O_CREAT| _O_SHORT_LIVED
Crea un file come temporaneo e se possibile non lo scarica su disco._O_CREAT| _O_TEMPORARY
Crea un file come temporaneo; il file viene eliminato quando l'ultimo descrittore del file viene chiuso._O_CREAT| _O_EXCL
Restituisce un errore se il file specificato da filename esiste.Si applica solo se utilizzato con _O_CREAT._O_NOINHERIT
Impedisce la creazione di un descrittore di file condiviso._O_RANDOM
Specifica l'accesso sul disco principalmente casuale._O_RDONLY
Apre un file in sola lettura; non può essere specificato con _O_RDWR o _O_WRONLY._O_RDWR
Apre un file in lettura e scrittura; non può essere specificato con _O_RDONLY o _O_WRONLY._O_SEQUENTIAL
Specifica l'accesso sul disco principalmente sequenziale._O_TEXT
Apre un file in modalità testo (convertito).(Per ulteriori informazioni, vedere File I/O modalità testo e binaria e fopen)._O_TRUNC
Apre un file e lo tronca a lunghezza zero; il file deve disporre dell'autorizzazione in scrittura.Non è possibile specificare questo flag con _O_RDONLY._O_TRUNC utilizzato con _O_CREAT apre un file esistente o crea un nuovo file.[!NOTA]
Il flag _O_TRUNC elimina in maniera permanente il contenuto del file specificato.
_O_WRONLY
Apre un file in sola scrittura; non può essere specificato con _O_RDONLY o _O_RDWR._O_U16TEXT
Apre il file in modalità Unicode UTF-16._O_U8TEXT
Apre il file in modalità Unicode UTF-8._O_WTEXT
Apre il file in modalità Unicode.
Per specificare la modalità di accesso al file, è necessario specificare _O_RDONLY, _O_RDWR, o _O_WRONLY.Non vi è alcun valore predefinito per la modalità d'accesso.
Se _sopen_s viene chiamata con _O_WRONLY|_O_APPEND (modalità di aggiunta) e _O_WTEXT, _O_U16TEXT, o _O_U8TEXT, tenterà innanzitutto di aprire il file in lettura e scrittura, di leggere il BOM, e quindi riaprirlo in sola scrittura.Se l'apertura del file in lettura e scrittura ha esito negativo, il file verrà aperto in sola lettura e verrà utilizzato il valore predefinito per l'impostazione della modalità Unicode.
L'argomento shflag è un'espressione costante costituita da una delle seguenti costanti manifesto, definite in Share.h.
_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 costanti manifesto _S_IWRITE e _S_IREAD, definite in SYS\Stat.h.Quando vengono fornite entrambe le costanti, queste sono combinate con l'operatore OR bit per bit.Il significato di pmode è indicato di seguito.
_S_IWRITE
Scrittura consentita._S_IREAD
Lettura consentita._S_IREAD | _S_IWRITE
Lettura e scrittura consentite.
Se non viene concessa l'autorizzazione in 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 (vedere _umask).
Requisiti
Routine |
Intestazione obbligatoria |
Intestazione facoltativa |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h>, <sys/types.h>, <sys/stat.h>, <share.h> |
_wsopen_s |
<io.h> o <wchar.h> |
<fcntl.h>, <sys/types.h>, <sys/stat.h>, <share.h> |
Per ulteriori informazioni sulla compatibilità, vedere Compatibilità nell'introduzione.
Esempio
Vedere l'esempio relativo a _locking.