_get_osfhandle
Holt das Betriebssystem-Dateihandle, das dem angegebenen Dateideskriptor zugeordnet ist.
Syntax
intptr_t _get_osfhandle(
int fd
);
Parameter
fd
Eine vorhandener Dateideskriptor.
Rückgabewert
Gibt ein Betriebssystemdateihandle zurück, falls fd
gültig. Andernfalls wird der ungültige Parameterhandler aufgerufen, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, wird sie zurückgegeben INVALID_HANDLE_VALUE
(-1). Außerdem wird festgelegt errno
EBADF
, dass ein ungültiger Dateihandle angegeben wird. Um eine Warnung zu vermeiden, wenn das Ergebnis als Win32-Dateihandle verwendet wird, wandeln Sie sie in einen Typ um HANDLE
.
Hinweis
Wenn stdin
, stdout
und stderr
nicht einem Datenstrom (z. B. in einer Windows-Anwendung ohne Konsolenfenster) zugeordnet sind, werden die Dateideskriptorwerte für diese Datenströme als Sonderwert -2 zurückgegeben _fileno
. Wenn Sie einen 0, 1 oder 2 als Dateideskriptorparameter anstelle des Ergebnisses eines Aufrufs _fileno
verwenden, _get_osfhandle
wird auch der Sonderwert -2 zurückgegeben, wenn der Dateideskriptor keinem Datenstrom zugeordnet ist und nicht festgelegt errno
wird. Dies ist jedoch kein gültiger Dateihandle-Wert, und nachfolgende Aufrufe, die versuchen, sie zu verwenden, werden wahrscheinlich fehlschlagen.
Weitere Informationen zu EBADF
und anderen Fehlercodes finden Sie unter errno
, , _doserrno
, _sys_errlist
und _sys_nerr
.
Hinweise
Zum Schließen einer Datei, deren Betriebssystemdateihandle (OS) durch _get_osfhandle
abgerufen wird, rufen Sie _close
den Dateideskriptor fd
auf. Rufen Sie niemals den Rückgabewert dieser Funktion auf CloseHandle
. Das zugrunde liegende Betriebssystemdateihandle gehört dem fd
Dateideskriptor und wird geschlossen, wenn _close
sie aufgerufen fd
wird. Wenn der Dateideskriptor einem FILE *
Datenstrom gehört, wird durch Aufrufen fclose
dieses FILE *
Datenstroms sowohl der Dateideskriptor als auch das zugrunde liegende Betriebssystemdateihandle geschlossen. Rufen Sie in diesem Fall nicht den Dateideskriptor auf _close
.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_get_osfhandle |
<io.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Siehe auch
Dateibehandlung
_close
_creat
, _wcreat
_dup
, _dup2
_open
, _wopen
_open_osfhandle