_open
, _wopen
Öffnet eine Datei. Diese Funktionen sind veraltet, da sicherere Versionen verfügbar sind; siehe _sopen_s
, _wsopen_s
.
Syntax
int _open(
const char *filename,
int oflag [,
int pmode]
);
int _wopen(
const wchar_t *filename,
int oflag [,
int pmode]
);
Parameter
filename
Dateiname.
oflag
Die zulässige Art von Vorgängen.
pmode
Berechtigungsmodus.
Rückgabewert
Jede dieser Funktionen gibt einen Dateideskriptor für die geöffnete Datei zurück. Der Rückgabewert -1 weist auf einen Fehler hin. In diesem Fall wird errno
auf einen der folgenden Werte festgelegt.
Wert vom Typ errno |
Bedingung |
---|---|
EACCES |
Es wurde versucht, eine schreibgeschützte Datei zum Schreiben zu öffnen, der Freigabemodus der Datei lässt die angegebenen Vorgänge nicht zu, oder der angegebene Pfad ist ein Verzeichnis. |
EEXIST |
_O_CREAT - und _O_EXCL -Flag angegeben, aber filename ist bereits vorhanden. |
EINVAL |
Ungültiges oflag - oder pmode -Argument. |
EMFILE |
Es sind keine weiteren Dateideskriptoren verfügbar (zu viele Dateien sind geöffnet). |
ENOENT |
Datei oder Pfad nicht gefunden. |
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Hinweise
Die Funktion _open
öffnet die von filename
angegebene Datei und bereitet sie für das Lesen oder Schreiben vor, wie von oflag
angegeben. _wopen
ist eine Breitzeichenversion von _open
. Das filename
-Argument für _wopen
ist eine Breitzeichenfolge. _wopen
und _open
verhalten sich andernfalls identisch.
Mapping generischer Textroutinen
<tchar.h> -Routine |
_UNICODE und _MBCS nicht definiert |
_MBCS definiert |
_UNICODE definiert |
---|---|---|---|
_topen |
_open |
_open |
_wopen |
oflag
ist ein ganzzahliger Ausdruck, der aus einer oder mehreren der folgenden Manifestkonstanten oder Konstantenkombinationen gebildet wird, die in <fcntl.h>
definiert sind.
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 _O_WTEXT
verwendet wird, um eine Datei zum Lesen zu öffnen, liest _open
den Anfang der Datei und überprüft sie auf eine Bytereihenfolgemarkierung (BOM). Wenn eine BOM vorhanden ist, wird die Datei je nach BOM als UTF-8 oder UTF-16LE behandelt. Wenn keine BOM vorhanden ist, wird die Datei als ANSI behandelt. Wenn eine Datei mit _O_WTEXT
zum Schreiben geöffnet wird, wird UTF-16 verwendet. Unabhängig von früheren Einstellungen oder Bytereihenfolgemarkierungen wird die Datei bei Verwendung von _O_U8TEXT
immer als UTF-8 geöffnet. Wenn _O_U16TEXT
verwendet wird, wird die Datei immer als UTF-16 geöffnet.
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 _open
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.
Wenn zwei oder mehr Manifestkonstanten verwendet werden, um das oflag
-Argument zu bilden, werden die Konstanten mit dem bitweisen OR-Operator kombiniert ( |
). Eine Erläuterung der Binär- und Textmodi finden Sie unter "Text- und Binärmodusdatei-E/A".
Das Argument pmode
ist nur erforderlich, wenn _O_CREAT
angegeben wird. Wenn die Datei bereits vorhanden ist, wird pmode
ignoriert. Andernfalls gibt pmode
die Dateiberechtigungseinstellungen an, die festgelegt werden, wenn die neue Datei zum ersten Mal geschlossen wird. _open
wendet die aktuelle Dateiberechtigungsmaske für pmode
an, bevor die Berechtigungen festgelegt werden. (Weitere Informationen finden Sie unter _umask
.) pmode
ist ein ganzzahliger Ausdruck, der eine oder beide der folgenden Manifestkonstanten enthält, die in <sys\stat.h>
definiert sind.
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 beide Konstanten angegeben werden, werden sie mit dem bitweisen OR-Operator ( |
) verknüpft. In Windows sind alle Dateien lesbar; Schreibgeschützte Berechtigung ist nicht verfügbar. Deshalb sind die Modi _S_IWRITE
und _S_IREAD
| _S_IWRITE
gleichwertig.
Wenn ein anderer Wert als eine andere Kombination von _S_IREAD
und _S_IWRITE
wird angegeben für pmode
– auch wenn er einen gültigen pmode
in einem anderen Betriebssystem angeben würde - oder wenn ein anderer Wert als die zulässigen oflag
Werte angegeben wird, generiert die Funktion eine Assertion im Debugmodus und ruft den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion -1 zurück und stellt errno
auf EINVAL
ein.
Anforderungen
Funktion | Erforderlicher Header | Optionaler Header |
---|---|---|
_open |
<io.h> |
<fcntl.h> , <sys\types.h> <sys\stat.h> |
_wopen |
<io.h> oder <wchar.h> |
<fcntl.h> , <sys\types.h> <sys\stat.h> |
_open
und _wopen
sind Microsoft-Erweiterungen. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Libraries
Alle Versionen der C-Laufzeitbibliotheken.
Beispiel
// crt_open.c
// compile with: /W3
/* This program uses _open to open a file
* named CRT_OPEN.C for input and a file named CRT_OPEN.OUT
* for output. The files are then closed.
*/
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <io.h>
#include <stdio.h>
int main( void )
{
int fh1, fh2;
fh1 = _open( "CRT_OPEN.C", _O_RDONLY ); // C4996
// Note: _open is deprecated; consider using _sopen_s instead
if( fh1 == -1 )
perror( "Open failed on input file" );
else
{
printf( "Open succeeded on input file\n" );
_close( fh1 );
}
fh2 = _open( "CRT_OPEN.OUT",
_O_WRONLY | _O_CREAT,
_S_IREAD | _S_IWRITE ); // C4996
if( fh2 == -1 )
perror( "Open failed on output file" );
else
{
printf( "Open succeeded on output file\n" );
_close( fh2 );
}
}
Output
Open succeeded on input file
Open succeeded on output file
Siehe auch
E/A auf niedriger Ebene
_chmod
, _wchmod
_close
_creat
, _wcreat
_dup
, _dup2
fopen
, _wfopen
_sopen
, _wsopen