指定されたファイル記述子に関連付けられている、オペレーティング システム ファイル ハンドルを取得します。
構文
intptr_t _get_osfhandle(
int fd
);
パラメーター
fd
既存のファイル記述子。
戻り値
fdが有効な場合は、オペレーティング システム のファイル ハンドルを返します。 それ以外の場合は、パラメーターの検証で説明されているように、無効なパラメーター ハンドラー呼び出されます。 実行の継続が許可された場合、INVALID_HANDLE_VALUE (-1) が返されます。 また、 errno を EBADFに設定し、無効なファイル ハンドルを示します。 結果が Win32 ファイル ハンドルとして使用されるときに警告を回避するには、 HANDLE 型にキャストします。
Note
stdin、stdout、およびstderrがストリームに関連付けられていない場合 (コンソール ウィンドウのない Windows アプリケーションなど)、これらのストリームのファイル記述子の値は、_filenoから特殊な値 -2 として返されます。 同様に、 _filenoの呼び出しの結果ではなく、ファイル記述子パラメーターとして 0、1、または 2 を使用する場合、 _get_osfhandle は、ファイル記述子がストリームに関連付けられていないときに特殊な値 -2 も返し、 errno設定しません。 ただし、これは有効なファイル ハンドル値ではなく、その値を使用しようとする後続の呼び出しは失敗する可能性があります。
EBADF やその他のエラー コードについては、「errno、_doserrno、_sys_errlist、および _sys_nerr」を参照してください。
解説
オペレーティング システム (OS) ファイル ハンドルが_get_osfhandleによって取得されたファイルを閉じるには、ファイル記述子fdで_closeを呼び出します。 この関数の戻り値に対して 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