_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_errlist
und _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 oflag
bilden, 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_WRONLY angegeben werden. |
_O_RDWR |
Öffnet eine Datei zum Lesen und zum Schreiben. Kann nicht mit _O_RDONLY oder _O_WRONLY angegeben 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_RDONLY angegeben 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_RDWR angegeben 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_t
gespeichert 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_IREAD
und , 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