_get_osfhandle

指定されたファイル記述子に関連付けられている、オペレーティング システム ファイル ハンドルを取得します。

構文

intptr_t _get_osfhandle(
   int fd
);

パラメーター

fd
既存のファイル記述子。

戻り値

有効な場合 fd は、オペレーティング システム ファイル ハンドルを返します。 それ以外の場合は、「パラメーターの検証」で説明されているように、無効なパラメーター ハンドラーが呼び出されます。 実行の継続が許可された場合、INVALID_HANDLE_VALUE (-1) が返されます。 また、無効なファイル ハンドルを示す 、に設定errnoEBADFされます。 結果が Win32 ファイル ハンドルとして使用されるときに警告を回避するには、それを型に HANDLE キャストします。

Note

ストリームstderrstdoutに関連付けられていない場合 stdin(コンソール ウィンドウのない Windows アプリケーションなど)、これらのストリームのファイル記述子の値は、特殊な値 -2 として返されます_fileno。 同様に、呼び出しの結果ではなくファイル記述子パラメーターとして 0、1、または 2 を _fileno使用する場合、 _get_osfhandle ファイル記述子がストリームに関連付けられていないときに特殊な値 -2 も返され、設定 errnoされません。 ただし、これは有効なファイル ハンドル値ではなく、その値を使用しようとする後続の呼び出しは失敗する可能性があります。

EBADF やその他のエラー コードについては、「errno_doserrno_sys_errlist、および _sys_nerr」を参照してください。

解説

オペレーティング システム (OS) ファイル ハンドルが取得された _get_osfhandleファイルを閉じるには、ファイル記述子を呼び出 _close します fd。 この関数の戻り値を呼び出 CloseHandle すことはありません。 基になる OS ファイル ハンドルはファイル記述子によってfd所有され、呼び出fdされたときに_close閉じられます。 ファイル記述子が FILE * ストリームによって所有されている場合、その FILE * ストリームでの fclose の呼び出しによって、ファイル記述子と基になる OS ファイル ハンドルの両方が閉じられます。 この場合は、ファイル記述子を呼び出 _close さないでください。

既定では、この関数のグローバル状態の適用対象は、アプリケーションになります。 この動作を変更するには、「CRT のグローバル状態」を参照してください

必要条件

ルーチンによって返される値 必須ヘッダー
_get_osfhandle <io.h>

互換性の詳細については、「 Compatibility」を参照してください。

関連項目

ファイル処理
_close
_creat, _wcreat
_dup, _dup2
_open, _wopen
_open_osfhandle