该示例的要点包括以下内容:
pool_query_pool_resources() 将获取 rl 中的所有资源的列表。由于 pool_query_pool_resources() 的最后一个参数为 NULL,因此将返回所有资源。对于每种资源,系统都会读取并列显 name、load 和 size 属性。
对 strdup() 的调用将分配本地内存并复制由 get_string() 返回的字符串。对 get_string() 的调用将返回一个指针,该指针由对 get_property() 的下一次调用释放。如果不包括对 strdup() 的调用,则对字符串的后续引用将导致应用程序出现故障,并出现段错误。
printf("pool %s\n:" pool_name);
pool = pool_get_pool(conf, pool_name);
rl = pool_query_pool_resources(conf, pool, &nelem, NULL);
for (i = 0; i < nelem; i++) {
pool_get_property(conf, pool_resource_to_elem(conf, rl[i]), "type", pval);
pool_value_get_string(pval, &type);
type = strdup(type);
snprintf(prop_name, 32, "%s.%s", type, "name");
pool_get_property(conf, pool_resource_to_elem(conf, rl[i]),
prop_name, pval);
pool_value_get_string(val, &res_name);
res_name = strdup(res_name);
snprintf(prop_name, 32, "%s.%s", type, "load");
pool_get_property(conf, pool_resource_to_elem(conf, rl[i]),
prop_name, pval);
pool_value_get_uint64(val, &load);
snprintf(prop_name, 32, "%s.%s", type, "size");
pool_get_property(conf, pool_resource_to_elem(conf, rl[i]),
prop_name, pval);
pool_value_get_uint64(val, &size);
printf("resource %s: size %llu load %llu\n", res_name, size, load);
free(type);
free(res_name);
}
free(rl);