当前位置: 首页>>代码示例>>C++>>正文


C++ Disk::fs方法代码示例

本文整理汇总了C++中Disk::fs方法的典型用法代码示例。如果您正苦于以下问题:C++ Disk::fs方法的具体用法?C++ Disk::fs怎么用?C++ Disk::fs使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Disk的用法示例。


在下文中一共展示了Disk::fs方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: disk_transfer

void Async::disk_transfer(
    Disk          disk,
    const Dirent& ent,
    on_write_func write_func,
    on_after_func callback,
    const size_t  CHUNK_SIZE)
{
  typedef delegate<void(size_t)> next_func_t;
  auto next = std::make_shared<next_func_t> ();
  auto weak_next = std::weak_ptr<next_func_t>(next);

  *next = next_func_t::make_packed(
  [weak_next, disk, ent, write_func, callback, CHUNK_SIZE] (size_t pos) {

    // number of write calls necessary
    const size_t writes = roundup(ent.size(), CHUNK_SIZE);

    // done condition
    if (pos >= writes) {
      callback(fs::no_error, true);
      return;
    }
    auto next = weak_next.lock();
    // read chunk from file
    disk->fs().read(
      ent,
      pos * CHUNK_SIZE,
      CHUNK_SIZE,
      fs::on_read_func::make_packed(
      [next, pos, write_func, callback] (
          fs::error_t  err,
          fs::buffer_t buffer)
      {
        debug("<Async> len=%lu\n", buffer->size());
        if (err) {
          printf("%s\n", err.to_string().c_str());
          callback(err, false);
          return;
        }

        // call write callback with data
        write_func(
          buffer,
          next_func::make_packed(
          [next, pos, callback] (bool good)
          {
            // if the write succeeded, call next
            if (LIKELY(good))
              (*next)(pos+1);
            else
              // otherwise, fail
              callback({fs::error_t::E_IO, "Write failed"}, false);
          })
        );
      })
    );
  });
  // start async loop
  (*next)(0);
}
开发者ID:AnnikaH,项目名称:IncludeOS,代码行数:60,代码来源:async.cpp


注:本文中的Disk::fs方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。