_sopen_s
, _wsopen_s
Otevře soubor pro sdílení. Tyto verze _sopen
a _wsopen
mají vylepšení zabezpečení, jak je popsáno v funkcích zabezpečení v CRT.
Syntaxe
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,
);
Parametry
pfh
Popisovač souboru nebo -1, pokud dojde k chybě.
filename
Název souboru
oflag
Druh operací je povolený.
shflag
Druh sdílení je povolený.
pmode
Nastavení oprávnění.
Vrácená hodnota
Nenulová návratová hodnota označuje chybu; v takovém případě errno
je nastavená na jednu z následujících hodnot.
errno hodnota |
Podmínka |
---|---|
EACCES |
Daná cesta je adresář nebo soubor je jen pro čtení, ale došlo k pokusu o operaci otevření pro zápis. |
EEXIST |
_O_CREAT a _O_EXCL příznaky byly zadány, ale filename již existují. |
EINVAL |
Neplatný oflag , , shflag nebo pmode argument nebo pfh filename byl nulový ukazatel. |
EMFILE |
Nejsou k dispozici žádné popisovače souborů. |
ENOENT |
Soubor nebo cesta nebyla nalezena. |
Pokud funkci předá neplatný argument, vyvolá se neplatná obslužná rutina parametru, jak je popsáno v ověření parametru. Pokud je spuštění povoleno pokračovat, errno
je nastavena na EINVAL
hodnotu a EINVAL
je vrácena.
Další informace o těchto a dalších návratových kódech naleznete v tématu , , , a_sys_nerr
. _sys_errlist
_doserrno
errno
Pokud dojde k chybě, vrátí pfh
se hodnota -1 (pokud pfh
není ukazatel null).
Poznámky
Funkce _sopen_s
otevře soubor určený filename
a připraví soubor pro sdílené čtení nebo zápis, jak je definováno oflag
a shflag
. _wsopen_s
je verze širokého znaku _sopen_s
filename
; argument je _wsopen_s
řetězec širokého znaku. _wsopen_s
a _sopen_s
chovat se stejně jinak.
Ve výchozím nastavení je globální stav této funkce vymezen na aplikaci. Pokud ho chcete změnit, přečtěte si téma Globální stav v CRT.
Mapování rutin obecného textu
Tchar.h rutina |
_UNICODE a _MBCS není definován |
_MBCS definovaný |
_UNICODE definovaný |
---|---|---|---|
_tsopen_s |
_sopen_s |
_sopen_s |
_wsopen_s |
Celočíselná výraz oflag
je tvořen kombinací jedné nebo více konstant manifestu, které jsou definovány v <fcntl.h>
. Když dvě nebo více konstant tvoří argument oflag
, jsou kombinovány s bitovým operátorem OR ( |
).
oflag konstanta |
Chování |
---|---|
_O_APPEND |
Před každou operací zápisu přesune ukazatel na konec souboru. |
_O_BINARY |
Otevře soubor v binárním (nepřeloženém) režimu. (Viz fopen popis binárního režimu.) |
_O_CREAT |
Vytvoří soubor a otevře ho pro zápis. Nemá žádný vliv, pokud soubor určený filename existuje. Argument pmode je povinný, pokud _O_CREAT je zadán. |
_O_CREAT | _O_SHORT_LIVED |
Vytvoří soubor jako dočasný a pokud je to možné, nevyprázdní se na disk. Argument pmode je povinný, pokud _O_CREAT je zadán. |
_O_CREAT | _O_TEMPORARY |
Vytvoří soubor jako dočasný; soubor se odstraní při zavření posledního popisovače souboru. Argument pmode je povinný, pokud _O_CREAT je zadán. Aby se zachovalo starší chování kvůli kompatibilitě aplikací, nebrání ostatním procesům v odstranění tohoto souboru. |
_O_CREAT | _O_EXCL |
Vrátí chybovou hodnotu, pokud soubor zadaný filename existuje. Platí pouze při použití s _O_CREAT . |
_O_NOINHERIT |
Zabraňuje vytvoření sdíleného popisovače souboru. |
_O_RANDOM |
Určuje, že ukládání do mezipaměti je optimalizované pro náhodný přístup z disku, ale není omezené na. |
_O_RDONLY |
Otevře soubor jen pro čtení. Nelze zadat pomocí _O_RDWR nebo _O_WRONLY . |
_O_RDWR |
Otevře soubor pro čtení i zápis. Nelze zadat pomocí _O_RDONLY nebo _O_WRONLY . |
_O_SEQUENTIAL |
Určuje, že ukládání do mezipaměti je optimalizované pro sekvenční přístup z disku, ale není omezené na. |
_O_TEXT |
Otevře soubor v textovém režimu ANSI (přeložený). (Další informace najdete v tématu Vstupně-výstupní a binární soubor textového a binárního režimu a fopen .) |
_O_TRUNC |
Otevře soubor a zkrátí ho na nulovou délku; soubor musí mít oprávnění k zápisu. Nelze zadat pomocí parametru _O_RDONLY . _O_TRUNC použitý při _O_CREAT otevření existujícího souboru nebo vytvoření souboru. Poznámka: Příznak _O_TRUNC zničí obsah zadaného souboru. |
_O_WRONLY |
Otevře soubor pouze pro zápis. Nelze zadat pomocí _O_RDONLY nebo _O_RDWR . |
_O_U16TEXT |
Otevře soubor v režimu Unicode UTF-16. |
_O_U8TEXT |
Otevře soubor v režimu Unicode UTF-8. |
_O_WTEXT |
Otevře soubor v režimu Unicode. |
Chcete-li určit režim přístupu k souboru, je nutné zadat _O_RDONLY
buď , _O_RDWR
nebo _O_WRONLY
. Pro režim přístupu neexistuje žádná výchozí hodnota.
Když je soubor otevřen v režimu Unicode pomocí _O_WTEXT
, _O_U8TEXT
nebo _O_U16TEXT
, vstupní funkce přeložit data načtená ze souboru do dat UTF-16 uložených jako typ wchar_t
. Funkce, které zapisují do souboru otevřeného v režimu Unicode, očekávají vyrovnávací paměti obsahující data UTF-16 uložená jako typ wchar_t
. Pokud je soubor kódovaný jako UTF-8, při zápisu se data UTF-16 přeloží do UTF-8. Obsah souboru s kódováním UTF-8 se při čtení přeloží do UTF-16. Pokus o čtení nebo zápis lichého počtu bajtů v režimu Unicode způsobí chybu ověření parametru. Pokud chcete číst nebo zapisovat data uložená v programu jako UTF-8, použijte místo režimu Unicode textový nebo binární soubor. Zodpovídáte za jakýkoli požadovaný překlad kódování.
Pokud _sopen_s
je volána pomocí _O_WRONLY | _O_APPEND
(režim připojení) a _O_WTEXT
, _O_U16TEXT
nebo , se _O_U8TEXT
nejprve pokusí otevřít soubor pro čtení a zápis, přečtěte si kusovník a znovu ho otevřete pouze pro zápis. Pokud se otevření souboru pro čtení a zápis nezdaří, otevře soubor pouze pro zápis a použije výchozí hodnotu pro nastavení režimu Unicode.
shflag
Argument je konstantní výraz, který se skládá z jedné z následujících konstant manifestu, které jsou definovány v <share.h>
.
shflag konstanta |
Chování |
---|---|
_SH_DENYRW |
Odepře přístup ke čtení a zápisu do souboru. |
_SH_DENYWR |
Odmítne přístup k zápisu do souboru. |
_SH_DENYRD |
Odmítne přístup pro čtení k souboru. |
_SH_DENYNO |
Povoluje přístup pro čtení a zápis. |
Argument pmode
je vždy povinný, na rozdíl od argumentu ._sopen
Pokud zadáte _O_CREAT
, pokud soubor neexistuje, pmode
určuje nastavení oprávnění souboru, které se nastaví při prvním zavření nového souboru. Jinak se pmode
ignoruje. pmode
je celočíselná výraz, který obsahuje jednu nebo obě konstanty _S_IWRITE
manifestu a _S_IREAD
, které jsou definovány v <sys\stat.h>
. Při zadání obou konstant se zkombinují s bitovým operátorem OR. pmode
Význam je následující.
pmode |
Význam |
---|---|
_S_IREAD |
Je povoleno pouze čtení. |
_S_IWRITE |
Zápis je povolený. (Ve skutečnosti povoluje čtení a zápis.) |
_S_IREAD | _S_IWRITE |
Čtení a psaní je povoleno. |
Pokud oprávnění k zápisu není uděleno, soubor je jen pro čtení. V operačním systému Windows jsou všechny soubory čitelné; Oprávnění jen pro zápis není možné udělit. Proto jsou režimy _S_IWRITE
a _S_IREAD | _S_IWRITE
jsou ekvivalentní.
_sopen_s
použije aktuální masku oprávnění k souboru před pmode
nastavením oprávnění. (Viz _umask
.)
Požadavky
Function | Požadovaný hlavičkový soubor | Volitelné záhlaví |
---|---|---|
_sopen_s |
<io.h> |
<fcntl.h> , <sys\types.h> , , <sys\stat.h> <share.h> |
_wsopen_s |
<io.h> nebo <wchar.h> |
<fcntl.h> , <sys/types.h> , , <sys/stat.h> <share.h> |
_sopen_s
a _wsopen_s
jedná se o rozšíření Microsoftu. Další informace o kompatibilitě najdete v tématu Kompatibilita.
Příklad
Podívejte se na příklad pro _locking
.
Viz také
Vstupně-výstupní operace nízké úrovně
_close
_creat
, _wcreat
fopen
, _wfopen
_fsopen
, _wfsopen
_open
, _wopen