_sopen_s, _wsopen_s

Öffnet eine Datei zur Freigabe. Diese Versionen von _sopen und _wsopen verfügen über Sicherheitsverbesserungen, wie in den Sicherheitsfeatures im CRT beschrieben.

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

Parameter

pfh
Das Dateihandle oder -1, wenn ein Fehler auftritt.

filename
Dateiname.

oflag
Die zulässige Art von Vorgängen.

shflag
Die Art der zulässigen Freigabe.

pmode
Berechtigungseinstellung.

Rückgabewert

Ein Rückgabewert ungleich Null weist auf einen Fehler hin. In diesem Fall wird errno auf einen der folgenden Werte festgelegt.

Wert vom Typ errno Bedingung
EACCES Der angegebene Pfad ist ein Verzeichnis, oder die Datei ist schreibgeschützt, aber es wurde versucht, sie zum Schreiben zu öffnen.
EEXIST Die Flags _O_CREAT und _O_EXCL wurden angegeben, filename existiert jedoch bereits.
EINVAL Ungültiges oflag-, shflag- oder pmode-Argument, oder pfh oder filename war ein NULL-Zeiger.
EMFILE Es sind keine Dateideskriptoren mehr verfügbar.
ENOENT Datei oder Pfad nicht gefunden.

Wenn ein ungültiges Argument an die Funktion übergeben wird, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, errno wird sie auf EINVAL, und EINVAL wird zurückgegeben.

Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno, _sys_errlistund _sys_nerr.errno

Wenn ein Fehler auftritt, wird -1 zurückgegeben pfh (es sei denn, es handelt sich um pfh einen Nullzeiger).

Hinweise

Die Funktion _sopen_s öffnet die durch filename angegebene Datei und bereitet sie zur Lese- oder Schreibfreigabe vor, wie in oflag und shflag definiert. _wsopen_s ist eine Breitzeichenversion von _sopen_s. Das filename -Argument für _wsopen_s ist eine Breitzeichenfolge. _wsopen_s und _sopen_s verhalten sich andernfalls identisch.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern finden Sie im Global state in the CRT.

Mapping generischer Textroutinen

Tchar.h-Routine _UNICODE und _MBCS nicht definiert _MBCS definiert _UNICODE definiert
_tsopen_s _sopen_s _sopen_s _wsopen_s

Der ganzzahlige Ausdruck oflag wird durch Kombinieren einer oder mehrerer Manifestkonstanten gebildet, die in <fcntl.h>definiert sind. Wenn zwei oder mehr Konstanten das Argument oflagbilden, werden sie mit dem bitweisen OR-Operator ( | ) kombiniert.

oflag-Konstante Behavior
_O_APPEND Verschiebt den Dateizeiger vor jedem Schreibvorgang an das Ende der Datei.
_O_BINARY Öffnet die Datei im Binärmodus (nicht übersetzt). (Eine Beschreibung des Binärmodus finden Sie unter fopen .)
_O_CREAT Erstellt eine Datei und öffnet sie zum Schreiben. Hat keine Auswirkung, wenn die von filename angegebene Datei vorhanden ist. Das Argument pmode ist erforderlich, wenn _O_CREAT angegeben wird.
_O_CREAT | _O_SHORT_LIVED Erstellt eine Datei als temporär und löscht nach Möglichkeit nicht auf den Datenträger. Das Argument pmode ist erforderlich, wenn _O_CREAT angegeben wird.
_O_CREAT | _O_TEMPORARY Erstellt eine temporäre Datei. Die Datei wird gelöscht, wenn der letzte Dateideskriptor geschlossen wird. Das Argument pmode ist erforderlich, wenn _O_CREAT angegeben wird. Um das Legacyverhalten für die App-Kompatibilität beizubehalten, werden andere Prozesse nicht daran gehindert, diese Datei zu löschen.
_O_CREAT | _O_EXCL Gibt einen Fehlerwert zurück, wenn eine durch filename angegebene Datei existiert. Gilt nur in Verwendung mit _O_CREAT.
_O_NOINHERIT Verhindert die Erstellung eines freigegebenen Dateideskriptors.
_O_RANDOM Gibt an, dass das Zwischenspeichern für den zufälligen Zugriff vom Datenträger optimiert, aber nicht darauf beschränkt ist.
_O_RDONLY Öffnet eine Datei nur zum Lesen. Kann nicht mit _O_RDWR oder _O_WRONLYangegeben werden.
_O_RDWR Öffnet eine Datei zum Lesen und zum Schreiben. Kann nicht mit _O_RDONLY oder _O_WRONLYangegeben werden.
_O_SEQUENTIAL Gibt an, dass das Zwischenspeichern für den sequenziellen Zugriff vom Datenträger optimiert, aber nicht darauf beschränkt ist.
_O_TEXT Öffnet eine Datei im ANSI-Textmodus (übersetzt). (Weitere Informationen finden Sie unter Text- und Binärmodus-Datei-E/A und fopen.)
_O_TRUNC Öffnet eine Datei und verkürzt sie auf die Länge Null. Für die Datei muss Schreibberechtigung bestehen. Kann nicht mit _O_RDONLYangegeben werden. _O_TRUNC in Kombination mit _O_CREAT öffnet eine existierende Datei oder erstellt eine Datei. Hinweis: Das _O_TRUNC Flag zerstört den Inhalt der angegebenen Datei.
_O_WRONLY Öffnet eine Datei nur zum Schreiben. Kann nicht mit _O_RDONLY oder _O_RDWRangegeben werden.
_O_U16TEXT Öffnet eine Datei im Unicode-UTF-16-Modus.
_O_U8TEXT Öffnet eine Datei im Unicode-UTF-8-Modus.
_O_WTEXT Öffnet eine Datei im Unicode-Modus.

Zum Angeben des Dateizugriffsmodus müssen Sie _O_RDONLY, _O_RDWR oder _O_WRONLY angeben. Für den Zugriffsmodus gibt es keinen Standardwert.

Wenn eine Datei mit _O_WTEXT, _O_U8TEXT oder _O_U16TEXT im Unicode-Modus geöffnet wird, übersetzen die Eingabefunktionen die aus der Datei gelesenen Daten in UTF-16-Daten, die als Datentyp wchar_t gespeichert werden. Funktionen, die in eine im Unicode-Modus geöffnete Datei schreiben, erwarten Puffer, die UTF-16-Daten, die als Datentyp wchar_tgespeichert sind. Wenn die Datei als UTF-8 codiert ist, werden UTF-16-Daten beim Schreiben in UTF-8 übersetzt. Der UTF-8-codierte Inhalt der Datei wird beim Lesen in UTF-16 übersetzt. Der Versuch, eine ungerade Anzahl von Bytes im Unicode-Modus zu lesen oder zu schreiben, führt zu einem Parametervalidierungsfehler . Wenn Sie Daten lesen oder schreiben möchten, die in Ihrem Programm als UTF-8 gespeichert sind, verwenden Sie den Text- oder Binärdateienmodus anstelle eines Unicode-Modus. Sie sind für alle erforderlichen Codierungsübersetzungen verantwortlich.

Wenn _sopen_s mit _O_WRONLY | _O_APPEND (Anfügemodus) und _O_WTEXT,_O_U16TEXT oder _O_U8TEXT aufgerufen wird, versucht sie zuerst, die Datei zum Lesen und Schreiben zu öffnen, und dann, die BOM zu lesen und die Datei erneut, jedoch nur zum Schreiben, zu öffnen. Wenn das Öffnen der Datei zum Lesen und Schreiben fehlschlägt, wird die Datei nur zum Schreiben geöffnet und der Standardwert für die Unicode-Moduseinstellung verwendet.

Das Argument shflag ist ein konstanter Ausdruck, der aus einer der folgenden Manifestkonstanten besteht, die in <share.h>definiert sind.

shflag-Konstante Behavior
_SH_DENYRW Verweigert den Lese- und Schreibzugriff auf eine Datei.
_SH_DENYWR Verweigert den Schreibzugriff auf eine Datei.
_SH_DENYRD Verweigert den Lesezugriff auf eine Datei.
_SH_DENYNO Gestattet Lese- und Schreibzugriff.

Das Argument pmode ist immer erforderlich, im Gegensatz zu _sopen. Wenn Sie angeben _O_CREAT, wenn die Datei nicht vorhanden ist, pmode gibt die Berechtigungseinstellungen der Datei an, die festgelegt werden, wenn die neue Datei zum ersten Mal geschlossen wird. Andernfalls wird pmode ignoriert. pmode ist ein ganzzahliger Ausdruck, der eine oder beide der Manifestkonstanten _S_IWRITE _S_IREADund , die definiert sind, <sys\stat.h>enthält. Wenn beide Konstanten angegeben werden, werden sie mit dem bitweisen OR-Operator kombiniert. pmode hat folgende Bedeutung:

pmode Bedeutung
_S_IREAD Nur Lesen zugelassen.
_S_IWRITE Schreiben erlaubt. (Lässt tatsächlich Lesen und Schreiben zu.)
_S_IREAD | _S_IWRITE Lesen und Schreiben erlaubt.

Wenn keine Schreibberechtigung erteilt wird, ist die Datei schreibgeschützt. Im Windows-Betriebssystem sind alle Dateien lesbar; Es ist nicht möglich, schreibgeschützte Berechtigungen zu erteilen. Deshalb sind die Modi _S_IWRITE und _S_IREAD | _S_IWRITE gleichwertig.

_sopen_s wendet die aktuelle Dateiberechtigungsmaske für pmode an, bevor die Berechtigungen festgelegt werden. (Siehe _umask.)

Anforderungen

Funktion Erforderlicher Header Optionaler Header
_sopen_s <io.h> <fcntl.h>, , <sys\types.h><sys\stat.h><share.h>
_wsopen_s <io.h> oder <wchar.h> <fcntl.h>, , <sys/types.h><sys/stat.h><share.h>

_sopen_s und _wsopen_s sind Microsoft-Erweiterungen. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

Ein Beispiel hierfür finden Sie unter _locking.

Siehe auch

E/A auf niedriger Ebene
_close
_creat, _wcreat
fopen, _wfopen
_fsopen, _wfsopen
_open, _wopen