c - 如何检索 CreateFile 结果的 FILE*?

标签 c visual-studio winapi

见标题。

我如何实现这个问题的反面:How do I get the file HANDLE from the fopen FILE structure?

我用

创建句柄
      HANDLE h = CreateFile(name,
                            GENERIC_WRITE,
                            0,
                            NULL,
                            OPEN_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL);

然后尝试使用 fputs 向其中写入一些数据。

fputs 调用失败

_VALIDATE_STREAM_ANSI_RETURN(stream, EINVAL, EOF);

其中 stream 是我从 CreateFile 获得的句柄。


我这样做的原因是我使用了一个使用 FILE* 句柄的外部库,并且我没有打开一个普通文件(直到现在),而是试图写入一个管道代替。并且更改外部库不是一种选择。

最佳答案

不知道这是否是最好的方法,但请参阅 _open_osfhandle():

http://msdn.microsoft.com/en-us/library/bdts1c9x(v=vs.71).aspx

int fd = _open_osfhandle(h, ...);

它返回一个文件描述符,您必须使用 fdopen 打开它以获得 FILE*

FILE* fp = _fdopen(fd, ...);

关于c - 如何检索 CreateFile 结果的 FILE*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7359188/

相关文章:

c - 如何通过 stdin 提供输入来使以下条件失败

c - Visual Studio "illegal use of this type as an expression"

c++ - 是否可以在键盘输入缓冲区中向前看并检测MFC/Win32中的条码输入?

c++ - 将 VARIANT 转换为字节,反之亦然?

c - 如何在 C 中为 gtk 窗口获取 gdk 窗口?

c - 字符串数组和 Gnome 排序

c# - Visual Studio 跳转到快捷方式

c - 为了拦截错误并生成错误日志条目,在 winapi 窗口过程中返回或执行什么操作

c - 刷新通信句柄接收缓冲区?

在 Visual Studio 2017 中编译 C 代码错误 LNK2005 和 LNK1169