Freigeben über


_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, stdoutund 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 _filenoverwenden, _get_osfhandle wird auch der Sonderwert -2 zurückgegeben, wenn der Dateideskriptor keinem Datenstrom zugeordnet ist und nicht festgelegt errnowird. 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_errlistund _sys_nerr.

Hinweise

Zum Schließen einer Datei, deren Betriebssystemdateihandle (OS) durch _get_osfhandleabgerufen wird, rufen Sie _close den Dateideskriptor fdauf. 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 fdwird. 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