_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_errlistund _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.

Generische Textroutinzuordnungen

<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 Verhalten
_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 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 _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_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 _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 EINVALein.

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.

Bibliotheken

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

Ausgabe

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