检索与指定的文件说明符关联的操作系统文件句柄。
语法
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 的结果,则当文件描述符与流不关联且未设置 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
%>
%>
%>
_open_osfhandle