该示例的要点包括以下内容:
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);