Dela via


_sopen_s, _wsopen_s

Öppnar en fil för delning. Dessa versioner av _sopen och _wsopen har säkerhetsförbättringar, enligt beskrivningen i Säkerhetsfunktioner i CRT-.

Syntax

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
);

Parameterar

pfh
Filhandtaget eller -1 om det finns ett fel.

filename
Filnamn.

oflag
Den typ av åtgärder som tillåts.

shflag
Den typ av delning som tillåts.

pmode
Behörighetsinställning.

Returvärde

Ett nonzero-returvärde anger ett fel. i så fall errno anges till något av följande värden.

errno värde Tillstånd
EACCES Den angivna sökvägen är en katalog, eller så är filen skrivskyddad, men ett försök gjordes att öppna för skrivning.
EEXIST _O_CREAT och _O_EXCL flaggor har angetts, men filename finns redan.
EINVAL Ogiltigt oflag, , eller pmode argument, eller filenamepfh var en shflagnullpekare.
EMFILE Inga fler filbeskrivningar är tillgängliga.
ENOENT Filen eller sökvägen hittades inte.

Om ett ogiltigt argument skickas till funktionen anropas den ogiltiga parameterhanteraren enligt beskrivningen i Parameterverifiering. Om körningen tillåts fortsätta anges errno till EINVALoch EINVAL returneras.

Mer information om dessa och andra returkoder finns i errno, _doserrno, _sys_errlistoch _sys_nerr.

Om det uppstår ett fel returneras -1 genom pfh (såvida inte pfh är en null-pekare).

Anmärkningar

Funktionen _sopen_s öppnar filen som anges av filename och förbereder filen för delad läsning eller skrivning, enligt definitionen av oflag och shflag. _wsopen_s är en bred teckenversion av _sopen_s; filename argumentet till _wsopen_s är en sträng med många tecken. _wsopen_s och _sopen_s beter sig identiskt annars.

Som standard är den här funktionens globala tillstånd begränsat till programmet. Information om hur du ändrar det finns i Globalt tillstånd i CRT-.

Allmän textrutinmappning

Tchar.h rutin _UNICODE och _MBCS inte definierat _MBCS definierad _UNICODE definierad
_tsopen_s _sopen_s _sopen_s _wsopen_s

Heltalsuttrycket oflag skapas genom att en eller flera manifestkonstanter kombineras, som definieras i <fcntl.h>. När två eller flera konstanter utgör argumentet oflagkombineras de med bitwise-OR-operatorn ( | ).

oflag konstant Beteende
_O_APPEND Flyttar filpekaren till slutet av filen före varje skrivåtgärd.
_O_BINARY Öppnar filen i binärt (oöversatt) läge. (Se fopen en beskrivning av binärt läge.)
_O_CREAT Skapar en fil och öppnar den för skrivning. Har ingen effekt om filen som anges av filename finns. Argumentet pmode krävs när _O_CREAT anges.
_O_CREAT | _O_SHORT_LIVED Skapar en fil som tillfällig och töms om möjligt inte till disk. Argumentet pmode krävs när _O_CREAT anges.
_O_CREAT | _O_TEMPORARY Skapar en fil som tillfällig. filen tas bort när den sista filbeskrivningen stängs. Argumentet pmode krävs när _O_CREAT anges. För att bevara äldre beteende för appkompatibilitet hindras inte andra processer från att ta bort den här filen.
_O_CREAT | _O_EXCL Returnerar ett felvärde om en fil som anges av filename finns. Gäller endast när det används med _O_CREAT.
_O_NOINHERIT Förhindrar att en delad filbeskrivning skapas.
_O_RANDOM Anger att cachelagring är optimerat för, men inte begränsat till, slumpmässig åtkomst från disk.
_O_RDONLY Öppnar en fil för endast läsning. Det går inte att ange med _O_RDWR eller _O_WRONLY.
_O_RDWR Öppnar en fil för både läsning och skrivning. Det går inte att ange med _O_RDONLY eller _O_WRONLY.
_O_SEQUENTIAL Anger att cachelagring är optimerat för, men inte begränsat till, sekventiell åtkomst från disk.
_O_TEXT Öppnar en fil i läget ANSI-text (översatt). Mer information finns i Text- och binärlägesfilen I/O och fopen.
_O_TRUNC Öppnar en fil och trunkerar den till noll längd. filen måste ha skrivbehörighet. Det går inte att ange med _O_RDONLY. _O_TRUNC används med _O_CREAT öppnar en befintlig fil eller skapar en fil. Not: Flaggan _O_TRUNC förstör innehållet i den angivna filen.
_O_WRONLY Öppnar en fil för endast skrivning. Det går inte att ange med _O_RDONLY eller _O_RDWR.
_O_U16TEXT Öppnar en fil i Unicode UTF-16-läge.
_O_U8TEXT Öppnar en fil i Unicode UTF-8-läge.
_O_WTEXT Öppnar en fil i Unicode-läge.

Om du vill ange filåtkomstläget måste du ange antingen _O_RDONLY, _O_RDWReller _O_WRONLY. Det finns inget standardvärde för åtkomstläget.

När en fil öppnas i Unicode-läge med hjälp _O_WTEXTav indatafunktionerna , _O_U8TEXTeller _O_U16TEXTöversätter indata som läses från filen till UTF-16-data som lagras som typ wchar_t. Funktioner som skriver till en fil som öppnas i Unicode-läge förväntar sig buffertar som innehåller UTF-16-data som lagras som typ wchar_t. Om filen kodas som UTF-8 översätts UTF-16-data till UTF-8 när den skrivs. Filens UTF-8-kodade innehåll översätts till UTF-16 när den läses. Ett försök att läsa eller skriva ett udda antal byte i Unicode-läge orsakar ett parameterverifieringsfel. Om du vill läsa eller skriva data som lagras i programmet som UTF-8 använder du ett text- eller binärfilläge i stället för ett Unicode-läge. Du ansvarar för all nödvändig kodningsöversättning.

Om _sopen_s anropas med _O_WRONLY | _O_APPEND (tilläggsläge) och _O_WTEXT, _O_U16TEXTeller _O_U8TEXT, försöker den först öppna filen för att läsa och skriva, läsa bommen och sedan öppna den för endast skrivning. Om det inte går att öppna filen för läsning och skrivning öppnas filen endast för skrivning och använder standardvärdet för unicode-lägesinställningen.

Argumentet shflag är ett konstant uttryck som består av en av följande manifestkonstanter, som definieras i <share.h>.

shflag konstant Beteende
_SH_DENYRW Nekar läs- och skrivåtkomst till en fil.
_SH_DENYWR Nekar skrivåtkomst till en fil.
_SH_DENYRD Nekar läsbehörighet till en fil.
_SH_DENYNO Tillåter läs- och skrivåtkomst.

Argumentet pmode krävs alltid, till skillnad från i _sopen. När du anger _O_CREATanger , om filen inte finns, pmode filens behörighetsinställningar, som anges när den nya filen stängs första gången. Annars pmode ignoreras. pmode är ett heltalsuttryck som innehåller en eller båda manifestkonstanterna _S_IWRITE och _S_IREAD, som definieras i <sys\stat.h>. När båda konstanterna anges kombineras de med bitwise-OR-operatorn. Innebörden av pmode är följande.

pmode Innebörd
_S_IREAD Endast läsning tillåten.
_S_IWRITE Skrivning tillåts. (I praktiken tillåter läsning och skrivning.)
_S_IREAD | _S_IWRITE Läsning och skrivning tillåts.

Om skrivbehörighet inte ges är filen skrivskyddad. I Windows-operativsystemet är alla filer läsbara. det går inte att ge skrivskyddad behörighet. Därför är lägena _S_IWRITE och _S_IREAD | _S_IWRITE likvärdiga.

_sopen_s tillämpar den aktuella filbehörighetsmasken pmode på innan behörigheterna anges. (Se _umask.)

Kravspecifikation

Funktion Obligatoriskt huvud Valfritt sidhuvud
_sopen_s <io.h> <fcntl.h>, <sys\types.h>, , <sys\stat.h><share.h>
_wsopen_s <io.h> eller <wchar.h> <fcntl.h>, <sys/types.h>, , <sys/stat.h><share.h>

_sopen_s och _wsopen_s är Microsoft-tillägg. Mer kompatibilitetsinformation finns i Kompatibilitet.

Exempel

Se exemplet för _locking.

Se även

Lågnivå-I/O
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen