_get_osfhandle

检索与指定的文件说明符关联的操作系统文件句柄。

语法

intptr_t _get_osfhandle(
   int fd
);

参数

fd
现有文件说明符。

返回值

如果 fd 有效,则返回操作系统文件句柄。 否则,将调用无效参数处理程序,如参数验证中所述。 如果允许执行继续,则返回 INVALID_HANDLE_VALUE (-1)。 它还会将 errno 设置为 EBADF,表示文件句柄无效。 为避免在将结果用作 Win32 文件句柄时出现警告,请将其强制转换为 HANDLE 类型。

注意

如果 stdinstdoutstderr 没有与流关联(例如,在没有控制台窗口的 Windows 应用程序中),这些流的文件描述符值将从 _fileno 中作为特殊值 -2 返回。 类似地,如果你使用 0、1 或 2 作为文件描述符参数,而不是调用 _fileno 的结果,则当文件描述符与流不关联且未设置 errno 时,_get_osfhandle 也会返回特殊值 -2。 但这不是有效的文件句柄值,并且如果后续调用尝试使用此值,则这些后续调用可能会失败。

有关 EBADF 和其他错误代码的详细信息,请参阅 errno_doserrno_sys_errlist_sys_nerr

备注

要关闭其操作系统 (OS) 文件句柄由 _get_osfhandle 获得的文件,请在文件描述符 fd 上调用 _close。 切勿对此函数的返回值调用 CloseHandle。 底层 OS 文件句柄由 fd 文件描述符拥有,并在对 fd 调用 _close 时关闭。 如果文件描述符由 FILE * 流拥有,则对 FILE *调用 fclose 会同时关闭文件描述符和底层句柄。 在这种情况下,不会对文件描述符调用 _close

默认情况下,此函数的全局状态范围限定为应用程序。 若要更改此行为,请参阅 CRT 中的全局状态

要求

例程 必需的标头
_get_osfhandle <io.h>

有关兼容性的详细信息,请参阅 兼容性

另请参阅

文件处理
_close
_creat_wcreat
_dup_dup2
_open_wopen
_open_osfhandle