是否可以将istream
转换为std::cin
到FILE *
?跨平台解决方案将是一个优势。
EX:(FILE *)std::cin
。
答案 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*
。
链接的手册页包含有关如何编写适配器的深入指导。