_sopen
, _wsopen
Öffnet eine Datei zur Freigabe. Sicherere Versionen dieser Funktionen sind verfügbar: siehe _sopen_s
, _wsopen_s
.
Syntax
int _sopen(
const char *filename,
int oflag,
int shflag [,
int pmode ]
);
int _wsopen(
const wchar_t *filename,
int oflag,
int shflag [,
int pmode ]
);
Parameter
filename
Dateiname.
oflag
Die zulässige Art von Vorgängen.
shflag
Die Art der zulässigen Freigabe.
pmode
Berechtigungseinstellung.
Rückgabewert
Jede dieser Funktionen gibt einen Dateideskriptor für die geöffnete Datei zurück.
Wenn filename
es sich um einen NULL
Zeiger handelt oder oflag
oflag
shflag
sich nicht innerhalb eines gültigen Wertebereichs befindet, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, geben diese Funktionen –1 zurück und setzen errno
auf einen der folgenden Werte.
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 - oder shflag -Argument. |
EMFILE |
Es sind keine Dateideskriptoren mehr verfügbar. |
ENOENT |
Datei oder Pfad wurde nicht gefunden. |
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die Funktion _sopen
öffnet die durch filename
angegebene Datei und bereitet sie zur Lese- oder Schreibfreigabe vor, wie in oflag
und shflag
definiert. _wsopen
ist eine Breitzeichenversion von _sopen
. Das filename
-Argument für _wsopen
ist eine Breitzeichenfolge. _wsopen
und _sopen
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 |
_sopen |
_sopen |
_wsopen |
Der ganzzahlige Ausdruck oflag
wird durch Kombinieren einer oder mehrerer der folgenden 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
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>
.
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 nur erforderlich, wenn _O_CREAT
angegeben wird. 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
wendet die aktuelle Dateiberechtigungsmaske für pmode
an, bevor die Berechtigungen festgelegt werden. Weitere Informationen finden Sie unter _umask
.
Anforderungen
Funktion | Erforderlicher Header | Optionaler Header |
---|---|---|
_sopen |
<io.h> |
<fcntl.h> , , <sys\types.h> <sys\stat.h> <share.h> |
_wsopen |
<io.h> oder <wchar.h> |
<fcntl.h> , , <sys\types.h> <sys\stat.h> <share.h> |
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