_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_errlist
und _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 rewind
neu 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 |
Behavior |
---|---|
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.obj verknüpfen. Der Standardwert für das globale Commit-Flag lautet "no-commit", es sei denn, Sie verknüpfen Ihr Programm explizit mit Commode.obj . |
Die t
, c
und n
mode
Optionen sind 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 mode
wird, 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 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.
Mapping generischer Textroutinen
<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
Output
Lines in file: 2
Weitere Informationen
Stream-E/A
_dup
, _dup2
fclose
, _fcloseall
fopen
, _wfopen
freopen
, _wfreopen
_open
, _wopen