Sdílet prostřednictvím


_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 Hodnotu 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, , shflagnebo pmode argument nebo pfhfilename 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 EINVALhodnotu 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_doserrnoerrno

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_sje verze širokého znaku _sopen_sfilename ; 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 Rutinní _UNICODE a _MBCS není definován _MBCS Definovány _UNICODE Definovány
_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 Konstantní 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_RDONLYbuď , _O_RDWRnebo _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_U8TEXTnebo _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_U16TEXTnebo , se _O_U8TEXTnejprve 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 Konstantní 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