Share via


_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