基于hello_world.cc的IO流程
// 创建rados对象
librados::Rados rados;
// 初始化rados对象
ret = rados.init("admin");
// 读取配置文件,-c 或 --config后接配置文件
ret = rados.conf_parse_argv(argc, argv);
ret = rados.conf_read_file(argv[i+1]);
// 连接redos cluster
ret = rados.connect();
// 创建pool
const char *pool_name = "hello_world_pool";
ret = rados.pool_create(pool_name);
// 创建pool的ioCtx
librados::IoCtx io_ctx;
ret = rados.ioctx_create(pool_name, io_ctx);
// 通过ioCtx写入指定对象
librados::bufferlist bl;
std::string hello("hello world!");
std::string object_name("hello_object");
bl.append(hello);
ret = io_ctx.write_full(object_name, bl);
// 通过ioCtx异步读出指定对象
std::string object_name("hello_object");
librados::bufferlist read_buf;
int read_len = 4194304; // this is way more than we need
librados::AioCompletion *read_completion = librados::Rados::aio_create_completion();
std::string read_string; // 保存读取的结果
ret = io_ctx.aio_read(object_name, read_completion, &read_buf, read_len, 0);
read_completion->wait_for_complete(); // 等待读取结束
ret = read_completion->get_return_value(); // 获取读取到的字符长度
read_buf.begin().copy(ret, read_string); // 从缓存转移到读取结果中
// setxattr
librados::ObjectWriteOperation write_op;
librados::bufferlist version_bl;
version_bl.append('2');
write_op.setxattr("version", version_bl); // 设置attr中version的值
ret = io_ctx.operate(object_name, &write_op); // 执行write op