Начните асинхронную запись при указанном смещении.
template<
typename ConstBufferSequence,
typename WriteHandler>
void-or-deduced async_write_some_at(
uint64_t offset,
const ConstBufferSequence & buffers,
WriteHandler handler);
Эта функция используется для асинхронной записи данных в ручку случайного доступа. Звонок функции всегда возвращается немедленно.
- offset
Смещение, при котором будут записаны данные.
- buffers
Один или несколько буферов данных, которые должны быть записаны на ручку. Хотя объект буферов может быть скопирован по мере необходимости, право собственности на базовые блоки памяти сохраняется абонентом, который должен гарантировать, что они остаются действительными до тех пор, пока обработчик не будет вызван.
- handler
-
Обработчик должен быть вызван, когда операция записи завершится. Копии будут сделаны из обработчика по мере необходимости. Функциональная подпись обработчика должна быть:
void handler(
const boost::system::error_code& error,
std::size_t bytes_transferred
);
Независимо от того, выполняется ли асинхронная операция немедленно или нет, обработчик не будет вызываться из этой функции. Запрос обработчика будет выполнен способом, эквивалентным использованию<boost::asio::io_service::post()
>.
Операция записи может не передавать все данные одноранговому устройству. Подумайте об использовании функции<async_write_at
>, если вам нужно убедиться, что все данные записаны до завершения асинхронной операции.
Для записи одного буфера данных используйте функцию<buffer
>следующим образом:
handle.async_write_some_at(42, boost::asio::buffer(data, size), handler);
Смотреть<buffer
>документация для информации о написании нескольких буферов за один ход, и как использовать его с массивами, бустер::array или std::vector.