|
Boost Users : |
Subject: Re: [Boost-users] boost::iostreams::copy - sink - ENOSPC (No space left on device) error handling
From: DK (dckorah+boost-users_at_[hidden])
Date: 2013-12-06 22:32:19
Please someone log a bug for this; I tried and couldn't get the Trac system
to think that my submission was not a spam.
It offered me a page that mentioned something about CAPTCHA, but without
the CAPTCHA input!
Much appreciate your help!
On 6 December 2013 10:43, Dino Korah <dckorah+boost-users_at_[hidden]> wrote:
> Platform: GCC on Linux; boost 1.55.
>
> In the code fragment below, is there a way to handle ENOSPC?
>
> #include <fstream>
> #include <iostream>
> #include <boost/iostreams/filtering_streambuf.hpp>
> #include <boost/iostreams/copy.hpp>
> #include <boost/iostreams/filter/bzip2.hpp>
>
> // open input file stream of the bzip2 file
> std::ifstream ifs("file.bz2");
>
> // open output stream to the "full" device
> // full device is a "utility-device" to check how applications handle
> ENOSPC
> // more details in "man full"
> std::ofstream ofs("/dev/full");
>
> // Setup the iostreams filter
> boost::iostreams::filtering_streambuf<boost::iostreams::output> filters;
> filters.push(boost::iostreams::bzip2_decompressor());
> filters.push(ofs);
>
> // "run" the filter
> boost::iostreams::copy(ifs, filters);
>
> If I do strace of the compiled binary, the code seem to infinitely call
> writev() with the same data and returns ENOSPC error.
>
> writev(4, [{NULL, 0}, {"DATA DATA "..., 4096}], 2) = -1 ENOSPC (No space
> left on device)
>
> How can this error be handled or made thrown as an error from
> boost::iostreams::copy()
>
> Is it possible to set appropriate exceptions() on the ofstream object? I
> tried ofs.exceptions(std::ios::badbit | std::ios::failbit) but it didn't
> make any difference.
>
>
>
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net