我有一个API,它有一个函数接受这里定义的AsyncWriteStream:
http://www.boost.org/doc/libs/1_39_0/doc/html/boost_asio/reference/AsyncWriteStream.html
目前使用(和工作)将数据流式传输到tcp套接字,使用:
http://www.boost.org/doc/libs/1_41_0/doc/html/boost_asio/reference/basic_stream_socket.html
我的问题是,此接口是否也可用于流式传输到磁盘上的文件。我怀疑答案是肯定的,但我想知道需要多少努力,特别是如果现有的实现支持该接口。
所以,重申一下。 API函数如下所示:
template <class AsyncWriteStream>
void stream_read(AsyncWriteStream &stream, completion_callback CB) { ...
API在内部使用boost::asio::async_write
将数据写入AsyncWriteStream。我希望AsyncWriteStream能够流式传输到tcp和文件套接字。也许我的问题也可以用来表达&#34;是否可以创建一个basic_stream_socket流式传输到磁盘而不是tcp?&#34;
我需要在Windows和Linux上都能使用它。
答案 0 :(得分:1)
这可能是重复的。从这里给出的答案:Whats the deal with boost.asio and file i/o?:
对于Windows使用:windows::random_access_handle
并管理偏移量。 (请注意,windows::stream_handle
不支持eof,请参阅:C++ boost asio Windows file handle async_read_until infinite loop - no eof)。
对于Linux,请打开该文件,然后使用posix::stream_descriptor
。 (注意,asio不支持文件io的epoll,定义BOOST_ASIO_DISABLE_EPOLL)
上述两种内容似乎都支持AsyncWriteStream接口,但我还是要测试。