_open, _wopen

Öffnet eine Datei. Diese Funktionen sind veraltet, da sichere Versionen verfügbar sind, siehe _sopen_s, _wsopen_s.

int _open(    const char *filename,    int oflag [,    int pmode]  ); int _wopen(    const wchar_t *filename,    int oflag [,    int pmode]  );

Parameter

  • filename
    Dateiname

  • oflag
    Die Art der zulässigen Vorgänge.

  • 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.

  • EACCES
    Versuch, eine schreibgeschützte Datei zum Schreiben zu öffnen, der Freigabemodus der Datei lässt die angegebenen Vorgänge nicht zu, oder der vorgegebene 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 errno, _doserrno, _sys_errlist und _sys_nerr.

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.

Zuordnung generischer Textroutinen

Tchar.h-Routine

_UNICODE und _MBCS nicht definiert

_MBCS definiert

_UNICODE definiert

_topen

_open

_open

_wopen

oflag ist ein Ganzzahlausdruck, der von einer oder mehreren der folgenden Manifestkonstanten oder Konstantenkombinationen gebildet wurde, die in <fcntl.h> definiert sind.

  • _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 ist.

  • _O_CREAT | _O_SHORT_LIVED
    Erstellt eine Datei als temporär und schreibt sie, wenn möglich, nicht auf den Datenträger. Das Argument pmode ist erforderlich, wenn _O_CREAT angegeben ist.

  • _O_CREAT | _O_TEMPORARY
    Erstellt eine Datei als temporär. Die Datei wird gelöscht, wenn der letzte Dateideskriptor geschlossen wird. Das Argument pmode ist erforderlich, wenn _O_CREAT angegeben ist.

  • _O_CREAT | _O_EXCL
    Gibt einen Fehlerwert zurück, wenn die von filename angegebene Datei vorhanden ist. Gilt nur bei Verwendung mit _O_CREAT.

  • _O_NOINHERIT
    Verhindert die Erstellung eines gemeinsam verwendeten 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 sowohl zum Lesen als auch 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 Textmodus (übersetzt). (Weitere Informationen finden Sie unter Text- und Binärmodus-Datei-E/A und fopen.)

  • _O_TRUNC
    Öffnet eine Datei und kürzt sie auf eine Länge von Null. Die Datei muss über eine Schreibberechtigung verfügen. Kann nicht mit _O_RDONLY angegeben werden. _O_TRUNC öffnet bei Verwendung mit _O_CREAT eine vorhandene Datei oder erstellt eine Datei.

    Hinweis

    Das _O_TRUNC-Flag zerstört die Inhalte der angegebenen Datei.

  • _O_WRONLY
    Öffnet die Datei nur zum Schreiben. Kann nicht mit _O_RDONLY oder _O_RDWR angegeben werden.

  • _O_U16TEXT
    Öffnet die Datei im Unicode UTF-16-Modus.

  • _O_U8TEXT
    Öffnet die Datei im Unicode UTF-8-Modus.

  • _O_WTEXT
    Öffnet die Datei im Unicode-Modus.

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

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 Eingabefunktionen die Daten, die aus der Datei gelesen werden, in UTF-16-Daten, die als Typ wchar_t gespeichert werden. Funktionen, die an eine im Unicode-Modus geöffnete Datei schreiben, erwarten Puffer, die UTF-16-Daten enthalten, die als Typ wchar_t gespeichert sind. Wenn die Datei als UTF-8 codiert ist, werden UTF-16-Daten beim Schreiben in UTF-8 übersetzt, und die UTF-8-codierten Inhalte der Datei werden beim Lesen in UTF-16 übersetzt. Der Versuch, eine ungerade Anzahl von Bytes im Unicode-Modus zu lesen oder zu schreiben, verursacht einen Parametervalidierungsfehler. Verwenden Sie zum Lesen oder Schreiben von Daten, die als UTF-8 in Ihrem Programm gespeichert sind, einen Text- oder Binärdateimodus anstelle eines Unicode-Modus. Sie sind für die gesamte erforderliche Codierungsübersetzung verantwortlich.

Wenn _open mit _O_WRONLY|_O_APPEND (Append-Modus) und _O_WTEXT, _O_U16TEXT oder _O_U8TEXT aufgerufen wird, wird zuerst versucht, die Datei zum Lesen und Schreiben zu öffnen, die BOM zu lesen und sie dann 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 Darstellung des Binär- und Textmodus finden Sie unter Text- und Binärmodus-Datei-E/A.

Das Argument pmode ist nur erforderlich, wenn _O_CREAT angegeben ist. 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 Ganzzahlausdruck, der eine oder beide der folgenden Manifestkonstanten enthält, die in <sys\stat.h> definiert sind.

  • _S_IREAD
    Nur Lesen zugelassen.

  • _S_IWRITE
    Schreiben zugelassen. (Lässt tatsächlich Lesen und Schreiben zu.)

  • _S_IREAD | _S_IWRITE
    Lesen und Schreiben zugelassen.

Wenn beide Konstanten gegeben sind, werden sie mit dem bitweisen OR-Operator verbunden ( |). In Windows sind alle Dateien lesbar, eine schreibgeschützte Berechtigung ist nicht verfügbar. Daher sind die Modi _S_IWRITE und _S_IREAD  | _S_IWRITE gleich.

Wenn ein anderer Wert als eine Kombination aus _S_IREAD und _S_IWRITE für pmode angegeben wird – selbst wenn dieser 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 Parametervalidierung beschrieben. Wenn die weitere Ausführung zugelassen wird, gibt die Funktion -1 zurück und stellt errno auf EINVAL ein.

Anforderungen

Routine

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 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

.NET Framework-Entsprechung

Siehe auch

Referenz

E/A auf niedriger Ebene

_chmod, _wchmod

_close

_creat, _wcreat

_dup, _dup2

fopen, _wfopen

_sopen, _wsopen