C/C++中的自定义FILE类型

Fra*_*ger 7 c c++

在C/C++中是否可以创建我自己的FILE(stdio.h)类型的自定义流,例如可以与fputs()一起使用?

小智 6

不,不是.FILE是所谓的opaque类型 - 它没有任何你可以自定义的东西.

  • @xtofl:因为 Windows 上的 FILE* 映射到 CreateFile 返回的 HANDLE。FILE* 不做“定制” (2认同)

Rob*_*edy 5

如果您的"自定义流"不是您可以用文件描述符或文件句柄表示的东西,那么您就不走运了.该FILE类型是实现定义的,所以有到其他事情与一个相关联的标准方法.

如果你可以获得一个C文件描述符,无论你想要写什么,那么你可以调用fdopen它来把它变成一个FILE*.它不是标准的C或C++,而是由Posix提供的.在Windows上,它是拼写的_fdopen.

如果您使用的是Windows并且有a HANDLE,则可以使用_open_osfhandle它将文件描述符与其关联,然后_fdopen从那里使用.

你真的被束缚了fputs吗?如果没有,则使用C++ IOStream替换它.然后你可以提供自己的后代std::basic_streambuf,将其包装在一起std::ostream,并在其上使用标准的C++ I/O.