如何检索CreateFile结果的FILE *?

时间:2011-09-09 08:48:53

标签: 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*句柄的外部库而且我没有打开普通文件(直到现在),而是试图写入管道。并且不能更改外部库。

2 个答案:

答案 0 :(得分:7)

不知道这是否是最佳方法,但请参阅_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, ...);

答案 1 :(得分:1)

CreateFile返回文件的内部Windows句柄。您可以使用此句柄使用WriteFile等函数写入文件。

要使用fputs,您需要在C中使用fopen函数打开该文件。如果您这样做,则无需明确调用CreateFile,{{1如果使用参数“w”调用(对于'write'),它会为你做。

因此,我不认为你所追求的是可能的。这两组功能不兼容。