Boost logo

Boost Users :

From: Rob Desbois (rob.desbois_at_[hidden])
Date: 2008-01-22 12:12:13


Jonathan - thank you, that's helped massively. I now have a serial_device
type along the lines you described :-)

Bob - thanks for the asio suggestion - I decided that it wasn't quite what
I'm looking for though.

Eric - I realised I actually configure the serial port as a blocking device
so it should be fine.

My final (I hope!) problem is in using a stream.
I cannot compile a program creating a stream object templated for my serial
device:

#include <boost/iostreams/stream.hpp>

#include "serial_device.h"
>
> int main(void) {
> boost::iostreams::stream<serial_device> s;
> }
>

Compiling that with g++ 3.3.3 gives:

test-stream.cpp: In function `int main()':
> test-stream.cpp:5: error: invalid use of template `template<class Device,
> class Tr, class Alloc> struct boost::iostreams::stream'
> test-stream.cpp:5: error: syntax error before `;' token
>

This is with Boost 1.34.1
Can any of you shed any light on this please?!

Thanks for all the help so far :-)
--rob

On Jan 21, 2008 3:09 PM, Eric MALENFANT <Eric.Malenfant_at_[hidden]>
wrote:

> > Rob Desbois, le 18 janvier 2008 08:02:
> >
> > >
> > > After trying to compile I realised that a SeekableDevice
> > > provides read, write and seek functions, nothing else.
> > > Am I seriously misunderstanding the point of
> > boost::iostreams?
>
> > On Jan 18, 2008 6:46 PM, Eric MALENFANT
> > <Eric.Malenfant_at_[hidden]> wrote:
>
> > A file_descriptor only implements the Device concept,
> > it not an std::iostream.
> > If you want an std::iostream, you wrap the Device in a
> > boost::iostreams::stream which, as stated in its
> > documentation: "performs i/o by delegating to a contained
> > Device", and "derives from a specialization of
> > std::basic_istream, std::basic_ostream or
> > std::basic_iostream, depending on whether the underlying
> > Device models Source, Sink or both."
>
> > Rob Desbois, le 18 janvier 2008 13:58:
> >
> > Are you able to comment on whether I 'should' be doing this
> > as regards the non-blocking and non-seekable nature of a serial port?
>
> The "seekability" should not be a problem. You could define a
> BidirectionalDevice as Jonathan suggests in another message. If you only
> need read (or write), you could even just define a Source (or Sink).
>
> The "blocking" side of things may be more trouble, depending on your
> needs.
> Boost.Iostreams offers minimal support for non-blocking strings:
> boost::iostreams::char_traits::would_block() can be used to indicate that a
> read or write attempt was interrupted but, unless I missed something,
> nothing allows the caller to wait for the blocking condition to be removed
> (like select() allows for non-blocking sockets, for example), so the caller
> has to poll the stream. As suggested by Bob Warren, Boost.Asio may offer
> an interesting alternative.
>
> Éric Malenfant
> ---------------------------------------------
> Amateur programmers think there are 1000 bytes in a kilobyte;
> Real Programmers think there are 1024 meters in a kilometer.
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>

-- 
Rob Desbois
Eml: rob.desbois_at_[hidden]
Tel: 07946 705987
"There's a whale there's a whale there's a whale fish" he cried, and the
whale was in full view.
...Then ooh welcome. Ahhh. Ooh mug welcome.


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