_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
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應