是否可以使用asio basic_stream_socket(或等效存在)来写入文件?

时间:2017-09-04 08:23:16

标签: c++ boost boost-asio

我有一个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上都能使用它。

1 个答案:

答案 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接口,但我还是要测试。