见标题。
我如何与此问题相反: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*
句柄的外部库而且我没有打开普通文件(直到现在),而是试图写入管道。并且不能更改外部库。
答案 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'),它会为你做。
因此,我不认为你所追求的是可能的。这两组功能不兼容。