_fdopen, _wfdopen

Verknüpft einen Stream mit einer Datei, die zuvor für E/A auf niedriger Ebene geöffnet war.

Syntax

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

Parameter

fd
Dateideskriptor der geöffneten Datei.

mode
Der Typ des Dateizugriffs.

Rückgabewert

Jede dieser Funktionen gibt einen Zeiger auf den geöffneten Stream zurück. Ein NULL-Zeigerwert gibt einen Fehler an. Wenn ein Fehler auftritt, wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn Sie Ausführung weiterhin ausgeführt werden darf, wird errno entweder auf EBADF, was auf einen fehlerhaften Dateideskriptor hinweist, oder auf EINVAL festgelegt, was darauf hinweist, dass mode ein NULL-Zeiger war.

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

Hinweise

Die Funktion _fdopen verknüpft einen E/A-Stream mit der durch fd ermittelten Datei. Dadurch wird der für E/A auf niedriger Ebene geöffneten Datei ermöglicht, gepuffert und formatiert zu werden. _wfdopen ist eine Breitzeichenversion von _fdopen. Das mode -Argument für _wfdopen ist eine Breitzeichenfolge. Andernfalls verhalten sich _wfdopen und _fdopen identisch.

An den übergebenen _fdopen Dateideskriptoren gehört der zurückgegebene FILE * Datenstrom. Wenn _fdopen dies erfolgreich ist, rufen Sie den Dateideskriptor nicht auf _close . Durch Aufrufen fclose des zurückgegebenen FILE * Aufrufs wird auch der Dateideskriptor geschlossen.

Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Informationen zum Ändern finden Sie im Global state in the CRT.

Die mode Zeichenfolge gibt den Dateizugriffstyp an, der für die Datei angefordert wurde:

mode Access
"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" Wird zum Schreiben am Ende der Datei (Anfügen) geöffnet. 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 Datei vorhanden ist, wird ihr Inhalt zerstört.
"a+" Öffnet sich zum Lesen und Anfügen. Erstellt die Datei, wenn sie nicht vorhanden ist.

Bei einer mit dem Zugriffstyp "a" oder "a+" geöffneten Datei erfolgen alle Schreibvorgänge am Ende der Datei. Der Dateizeiger kann mithilfe fseek oder rewindneu positioniert werden, wird jedoch immer wieder an das Ende der Datei verschoben, bevor ein Schreibvorgang ausgeführt wird. Daher 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 jedoch zwischen Lesen und Schreiben wechseln, muss ein sich dazwischen befindender Vorgang wie fflush, fsetpos, fseek oder rewind vorhanden sein. Sie können bei Bedarf die aktuelle Position für den fsetpos- oder fseek-Vorgang angeben.

Zusätzlich zu den oben genannten Werten können die folgenden Zeichen auch einbezogen mode werden, um den Übersetzungsmodus für Neuzeilenzeichen anzugeben:

mode Modifizierer Verhalten
t Öffnen im Textmodus (übersetzt). Im Textmodus werden Wagenrücklauf-/Zeilenvorschub-Kombinationen (CR-LF) bei der Eingabe in einzelne Zeilenvorschübe (LF) übersetzt. LF-Zeichen werden bei der Ausgabe in CR-LF-Kombinationen übersetzt. Außerdem wird STRG+Z bei der Eingabe als EOF-Zeichen interpretiert.
b Wird im binären (nicht übersetzten) Modus geöffnet. Übersetzungen aus dem 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 Commit-Flag für das zugeordnete filename "no-commit" zurück. Dieses Kennzeichen ist die Standardeinstellung. Außerdem wird das globale Commit-Flag außer Kraft gesetzt, wenn Sie Ihr Programm mit Commode.objverknüpfen. Der Standardwert für das globale Commit-Flag lautet "no-commit", es sei denn, Sie verknüpfen Ihr Programm explizit mit Commode.obj.

Bei den Optionen t, c und nmode handelt es sich um Microsoft-Erweiterungen für fopen und _fdopen. Verwenden Sie sie nicht, wenn Sie die ANSI-Portabilität beibehalten möchten.

Wenn t oder b nicht angegeben modewird, wird der Standardübersetzungsmodus durch die globale Variable _fmodedefiniert. Wenn dem Argument t oder b vorangestellt wird, schlägt die Funktion fehl und gibt NULLzurück. Eine Erläuterung der Text- und Binärmodi finden Sie unter "Text- und Binärmodusdatei-E/A".

Gültige Zeichen für die mode verwendete fopen Zeichenfolge und entsprechen oflag den in _open und _fdopen_sopen, wie in dieser Tabelle dargestellten Argumenten:

Zeichen in der mode-Zeichenfolge Äquivalenter oflag Wert für _open und _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 Keine
n Keine

Anforderungen

Funktion Erforderlicher Header C++-Header
_fdopen <stdio.h> <cstdio>
_wfdopen <stdio.h> oder <wchar.h> <cstdio>

Weitere Informationen zur Standardskonformität und Benennungskonventionen in der C-Laufzeitbibliothek finden Sie unter Kompatibilität.

Generische Textroutinzuordnungen

<tchar.h> Routine _UNICODE und _MBCS nicht definiert _MBCS Definiert _UNICODE Definiert
_tfdopen _fdopen _fdopen _wfdopen

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

Siehe auch

Stream-E/A
_dup, _dup2
fclose, _fcloseall
fopen, _wfopen
freopen, _wfreopen
_open, _wopen