#include <iostream> #include <cstdio> #include <unistd.h> #include <boost/iostreams/device/file_descriptor.hpp> #include <boost/iostreams/stream.hpp> void write() { FILE* fp = fopen("whatever.txt", "w"); if (fp == NULL) { perror("fopen error"); } int fd = fileno(fp); boost::iostreams::stream_buffer<boost::iostreams::file_descriptor_sink> bis(fd); std::ostream os(&bis); os << "Hello World!" << std::endl; fclose(fp); } void read() { FILE* fp = fopen("whatever.txt", "r"); if (fp == NULL) { perror("fopen error"); } int fd = fileno(fp); boost::iostreams::stream_buffer<boost::iostreams::file_descriptor_source> bis(fd); std::istream is(&bis); while (is) { std::string line; std::getline(is, line); std::cout << line << std::endl; } fclose(fp); } int main() { write(); read(); return 0; }
Wednesday, June 22, 2011
How to Convert C FILE* to C++ iostream
When we deal with a lot of C libraries in our C++ code, there may be cases where we need to convert the C FILE* into C++ iostream. Boost iostreams can help to deal with such problems easily. Here's an example how to do it.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment