Freigeben über


_fdopen, _wfdopen

Ordnet einen Stream mit einer Datei an, die zuvor für E/A systemnahe geöffnet wurde.

FILE *_fdopen(  
   int fd,
   const char *mode 
);
FILE *_wfdopen( 
   int fd,
   const wchar_t *mode 
);

Parameter

  • fd
    Dateideskriptor der geöffneten Datei.

  • mode
    Typ des Datei-.

Rückgabewert

Jede dieser Funktionen gibt einen Zeiger auf das geöffnete Stream zurück. Ein NULL-Zeigerwert gibt einen Fehler an. Wenn ein Fehler auftritt, wird der ungültige Parameterhandler aufgerufen, wie in Parametervalidierung beschrieben. Wenn die Ausführung zulässig ist, um fortzufahren, ist errno festgelegte jede an EBADF, die einen ungültigen Dateideskriptor angibt, oder EINVAL, der angibt, diese mode war ein NULL-Zeiger.

Weitere Informationen zu diesen und anderen Fehlercodes finden Sie unter _doserrno, errno, _sys_errlist und _sys_nerr.

Hinweise

Die _fdopen ordnet einem E/A-Stream Funktion mit der Datei, die durch fd bezeichnet wird, und kann daher eine Datei, die geöffnet ist, sodass E/A die systemnahen gepuffert werden und formatiert werden kann. _wfdopen ist eine Breitzeichenversion von _fdopen. Das mode-Argument für _wfdopen ist eine Breitzeichenfolge. _wfdopen und _fdopen sich verhalten andernfalls identisch.

Zuordnung generischer Textroutinen

Tchar.h-Routine

_UNICODE und _MBCS nicht definiert

_MBCS definiert

_UNICODE definiert

_tfdopen

_fdopen

_fdopen

_wfdopen

mode Die Zeichenfolge gibt den Typ der Datei und des Datei- an.

Die Zeichenfolge mode gibt den Zugriffstyp angefordert nach der Datei, wie in der folgenden Tabelle gezeigt.

  • "r"
    Öffnet zum Lesen. Wenn die Datei nicht vorhanden ist oder nicht gefunden werden kann, schlägt der fopen-Aufruf fehl.

  • "w"
    Öffnet eine leere Datei zum Schreiben. Wenn die angegebene Datei vorhanden ist, wird ihr Inhalt zerstört.

  • "a"
    Öffnet sich zum Schreiben, am Ende der Datei (Hinzufügen). Erstellt die Datei, wenn sie nicht vorhanden ist.

  • "r+"
    Öffnet sowohl zum Lesen als auch zum Schreiben. (Die Datei muss vorhanden sein.)

  • "w+"
    Öffnet eine leere Datei zum Lesen und Schreiben. Wenn die angegebene Datei vorhanden ist, wird ihr Inhalt zerstört.

  • "a+"
    Öffnet sich zum Lesen und Anfügen. Erstellt die Datei, wenn sie nicht vorhanden ist.

Wenn eine Datei mit dem "a" oder "a+" geöffnet Zugriffstyp ist, wenden alle Schreibvorgänge am Ende der Datei auf. Der Dateizeiger kann neu angeordnet werden, indem Sie fseek oder rewind verwendet, aber er ist immer wieder am Ende der Datei verschoben, bevor ein Schreibvorgang durchgeführt wird. Folglich können vorhandene Daten nicht überschrieben werden. Wenn als Zugriffstyp "r+", "w+" oder "a+" angegeben wird, sind sowohl Lese- als auch Schreibvorgänge zulässig (die Datei ist zum Aktualisieren geöffnet). Wenn Sie zwischen das Lesen und Schreiben wechseln, es dazwischenliegendes fflush, fsetpos, fseek oder rewind geben Vorgang müssen. Sie können die aktuelle Position für den Vorgang fsetpos oder fseek angeben, wenn Sie möchten.

Neben den obigen Werten folgenden Zeichen dürfen in mode ebenfalls eingeschlossen werden, um den Übersetzungsmodus für Zeilenumbruchzeichen anzugeben.

  • t
    Öffnen im Textmodus (übersetzt). In diesem Modus werden Kombinationen von Wagenrücklauf-Zeilenvorschubs (CR-LF) in EinZeilenfeeds (LF) auf Eingaben übersetzt, und Zeilenvorschubzeichen werden zu CR-LF Kombinationen auf Ausgabe übersetzt. Außerdem STRG+Z wird als auf Dateiendezeichen Eingabe interpretiert. In den Dateien, die für das Lesen und Schreiben geöffnet sind, überprüft fopen für STRG+Z am Ende der Datei und entfernt sie, sofern möglich. Dies geschieht, da die Anwendung u der Funktionen fseek und ftell, die in einer Datei zu ersetzen, die mit STRG+Z beendet, fseek wurde, sich neben das Ende der Datei falsch verhält.

  • b
    Öffnen im binären (unübersetzten Modus). Alle von Übersetzungen t Modus werden unterdrückt.

  • c
    Aktivieren Sie das Commitflag für den zugeordneten Parameter filename, sodass der Inhalt des Dateipuffers direkt auf einen Datenträger geschrieben wird, wenn fflush oder _flushall aufgerufen wird.

  • n
    Setzen Sie das Commitflag für den zugeordneten Parameter filename auf "no-commit" zurück. Dies ist der Standardwert. Es überschreibt auch das globale Commitflag, wenn Sie das Programm mit Commode.obj verknüpfen. Der globale Commitflagstandard ist "NO-Commit" es sei denn, dass Sie explizit das Programm mit Commode.obj verknüpfen.

t, c und n Optionen mode sind Microsoft-Erweiterungen für fopen und _fdopen. Verwenden Sie sie nicht, wenn Sie ANSI-Portabilität beibehalten möchten.

Wenn t oder b nicht in mode angegeben ist, wird der Standardübersetzungsmodus durch die globale Variable _fmode definiert. Wenn dem Argument t oder b vorangestellt wird, schlägt die Funktion fehl und gibt NULL zurück. Eine Erörterung von Text- und Binärmodi finden Sie unter Text- und Binärmodus-Datei-E/A.

Gültige Zeichen für die mode-Zeichenfolge, die in fopen und _fdopen verwendet wird, entsprechen oflag-Argumenten, die in _open und _sopen verwendet werden (siehe unten).

Zeichen in mode Zeichenfolge

Entsprechender oflag-Wert für _open/_sopen

a

_O_WRONLY | _O_APPEND (meistens _O_WRONLY | _O_CREAT | _O_APPEND)

a+

_O_RDWR | _O_APPEND (meistens _O_RDWR | _O_APPEND | _O_CREAT )

r

_O_RDONLY

r+

_O_RDWR

w

_O_WRONLY (meistens _O_WRONLY | _O_CREAT | _O_TRUNC)

w+

_O_RDWR (meistens _O_RDWR | _O_CREAT | _O_TRUNC)

b

_O_BINARY

t

_O_TEXT

c

Kein

n

Kein

Anforderungen

Funktion

Erforderlicher Header

_fdopen

<stdio.h>

_wfdopen

<stdio.h> oder <wchar.h>

Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Beispiel

// crt_fdopen.c
// This program opens a file by using low-level
// I/O, then uses _fdopen to switch to stream
// access. It counts the lines in the file.


#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <share.h>

int main( void )
{
   FILE *stream;
   int  fd, count = 0;
   char inbuf[128];

   // Open a file.
   if( _sopen_s( &fd, "crt_fdopen.txt", _O_RDONLY, _SH_DENYNO, 0 ) )
      exit( 1 );

   // Get stream from file descriptor.
   if( (stream = _fdopen( fd, "r" )) == NULL )
      exit( 1 );

   while( fgets( inbuf, 128, stream ) != NULL )
      count++;

   // After _fdopen, close by using fclose, not _close.
   fclose( stream );
   printf( "Lines in file: %d\n", count );
}

Eingabe: crt_fdopen.txt

Line one
Line two

Ausgabe

Lines in file: 2

.NET Framework-Entsprechung

System::IO::FileStream::FileStream

Siehe auch

Referenz

Stream-E/A

_dup, _dup2

fclose, _fcloseall

fopen, _wfopen

freopen, _wfreopen

_open, _wopen