_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
的结果,则当文件描述符与流不关联且未设置 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