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