共用方式為


_get_osfhandle

擷取與指定的檔案描述元相關聯的作業系統檔案控制代碼。

語法

intptr_t _get_osfhandle(
   int fd
);

參數

fd
現有的檔案描述元。

傳回值

如果 fd 有效,則傳回操作系統檔句柄。 否則,會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,則會傳 INVALID_HANDLE_VALUE 回 (-1)。 它也會設定 errnoEBADF,表示無效的檔案句柄。 若要避免當結果做為 Win32 檔句柄時發出警告,請將它 HANDLE 轉換成類型。

注意

stdinstdoutstderr 未與數據流相關聯時(例如,在沒有控制台視窗的 Windows 應用程式中),這些數據流的檔案描述元值會從 _fileno 傳回為特殊值 -2。 同樣地,如果您使用 0、1 或 2 做為檔案描述元參數,而不是呼叫 _fileno的結果, _get_osfhandle 也會在檔案描述元未與數據流相關聯且未設定 errno時傳回特殊值 -2。 不過,這不是有效的檔句柄值,而且嘗試使用它的後續呼叫可能會失敗。

如需其他錯誤碼的詳細資訊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>

如需相容性詳細資訊,請參閱相容性

另請參閱

檔案處理
_close
_creat, _wcreat
_dup, _dup2
_open, _wopen
_open_osfhandle