21 Ocak 2018 Pazar

iostreams file_descriptor_source Sınıfı

Giriş
Şu satırı dahil ederiz.
#include <boost/iostreams/device/file_descriptor.hpp>
Elimizde bir file descriptor varsa bu fd'nin bis::stream ile kullanılabilmesini sağlar. Yani bir çeşit adaptor gibi düşünülebilir.

Constructor
Şöyle yaparız.
bid::file_descriptor_source fd_s (..., bis::close_handle);
Constructor - path
Şöyle yaparız.
namespace io = boost::iostreams;
namespace fs = boost::filesystem;
auto inputFile = io::file_descriptor_source(fs::path(L"testfile.txt"));
Bunu std::vector'e çevirmek için şöyle yaparız.
template<class IoDevice>
std::vector<unsigned char> read_all(IoDevice& io_device) {
  boost::iostreams::stream<IoDevice> io_stream(io_device);
  return std::vector<unsigned char>(
    std::istreambuf_iterator<char>{io_stream},
    std::istreambuf_iterator<char>{}
  );
}
Stream İle Kullanım
Bu sınıf bir stream ile kullanılabillir. Şu satırı dahil ederiz.
#include <boost/iostreams/stream.hpp>
Örnek - stream constructor
Şöyle yaparız.
bis::stream<bis::file_descriptor_source> is (fd_source);
Stream normal işlemlerde tabi tutulur. Şöyle yaparız.
std::string str;
while (std::getline(is, str)){
  ...
}
Şöyle yaparız.
std::string s;
is >> s;
Örnek - stream open metodu
Şöyle yaparız
boost::iostreams::file_descriptor_source  fd_source
  (..., boost::iostreams::close_handle);

boost::iostreams::stream< boost::iostreams::file_descriptor_source > is
...
is.open(fd_source);

while (is) {
  std::string line;

  std::getline(is, line);

}

Hiç yorum yok:

Yorum Gönder