是否有一个Windows相当于HANDLE的fdopen?
在Unix中,如果你有一个文件描述符(例如从一个套接字,pipe道或从你的父进程inheritance),你可以用fdopen(3)打开一个缓冲的I / O FILE*stream。 
 在Windows上是否有相同的HANDLE ? 如果你有一个从你的父进程(与stdin,stdout或stderr不同)inheritance的HANDLE或CreatePipe一个pipe道,是否有可能从它获得缓冲的FILE*stream?  MSDN不logging_fdopen ,但是与_open返回的整型文件描述符一起使用,而不是genericsHANDLE 。 
 不幸的是, HANDLE是与FILE*和文件描述符完全不同的。  CRT最终用HANDLE处理文件,并将这些HANDLE与文件描述符相关联。 这些文件描述符依次由FILE*结构指针。 
幸运的是,在这个MSDN页面上有一节介绍了“提供一种方法来改变FILE结构,文件描述符和Win32文件句柄之间文件的表示forms”:
_fdopen,_wfdopen:将stream与先前为低级别I / O打开的文件关联,并返回指向打开stream的指针。
_fileno:获取与stream关联的文件描述符。
_get_osfhandle:返回与现有C运行时文件描述符相关的操作系统文件句柄
_open_osfhandle:将C运行时文件描述符与现有的操作系统文件句柄相关联。
 看起来你需要的是_open_osfhandle后跟_fdopen从HANDLE获取FILE* 。 
 这是一个涉及从CreateFile()获取的HANDLE的例子。 当我testing它时,它显示文件“test.txt”的前255个字符,并在文件末尾附加“— Hello World!—” 
 #include <windows.h> #include <io.h> #include <fcntl.h> #include <cstdio> int main() { HANDLE h = CreateFile("test.txt", GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0); if(h != INVALID_HANDLE_VALUE) { int fd = _open_osfhandle((intptr_t)h, _O_APPEND | _O_RDONLY); if(fd != -1) { FILE* f = _fdopen(fd, "a+"); if(f != 0) { char rbuffer[256]; memset(rbuffer, 0, 256); fread(rbuffer, 1, 255, f); printf("read: %s\n", rbuffer); fseek(f, 0, SEEK_CUR); // Switch from read to write const char* wbuffer = " --- Hello World! --- \n"; fwrite(wbuffer, 1, strlen(wbuffer), f); fclose(f); // Also calls _close() } else { _close(fd); // Also calls CloseHandle() } } else { CloseHandle(h); } } } 
这应该也适用于pipe道。