_get_osfhandle
擷取與指定的檔案描述元相關聯的作業系統檔案控制代碼。
語法
intptr_t _get_osfhandle(
int fd
);
參數
fd
現有的檔案描述元。
傳回值
如果 fd
有效,則傳回操作系統檔句柄。 否則,會叫用無效的參數處理程式,如參數驗證中所述。 如果允許繼續執行,則會傳 INVALID_HANDLE_VALUE
回 (-1)。 它也會設定 errno
為 EBADF
,表示無效的檔案句柄。 若要避免當結果做為 Win32 檔句柄時發出警告,請將它 HANDLE
轉換成類型。
注意
當 stdin
、 stdout
和 stderr
未與數據流相關聯時(例如,在沒有控制台視窗的 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