将istream转换为FILE *

时间:2014-05-17 00:47:05

标签: c++ iostream stdio

是否可以将istream转换为std::cinFILE *?跨平台解决方案将是一个优势。

EX:(FILE *)std::cin

5 个答案:

答案 0 :(得分:3)

不,没有标准方法可以从IOStreams流中获取FILE*,反之亦然。

答案 1 :(得分:0)

std :: cin通常绑定到文件描述符1(或者以FILE *形式,stdin)。

你可以使用它。除此之外,唯一的方法是确定文件描述符(不太可能)或文件名并使用fopen来获取FP

答案 2 :(得分:0)

使用FILE*没有简单的方法我会建议您改用fstream

std::ifstream in("in.txt");
std::cin.rdbuf(in.rdbuf());

这样您可以重定向到您的输入文件流。

答案 3 :(得分:0)

尽管您的IOStream实现可能使用FILE*实现,但该标准并未提供您访问此信息的任何方式。但是,据我所知,libstdc ++有一个非标准扩展__gnu_cxx::stdio_filebuf,它是FILE*的包装器。您可以使用其file()方法返回指向该文件的指针。

请注意,此类是非可移植且非标准的。我认为你最好自己编写一个模拟其行为的流缓冲区。

答案 4 :(得分:0)

如果您有一个GNU用户空间(在Linux上几乎可以保证),请查看fopencookie()。这允许您将任何源/接收器调整为FILE*

链接的手册页包含有关如何编写适配器的深入指导。