Solaris ネーミングの管理

オブジェクト属性のリスト表示

次の例は、オブジェクト属性をリスト表示する方法を示しています。

#include <stdio.h> 
#include <xfn/xfn.h> 
/*  
 このルーチンは名前付きオブジェクトに関連付けられたすべての属性を
 標準出力に出力する。関数の使用例として fns_attr_list("user/jsmith"); や 
 fns_attr_list("thisorgunit/service/printer/color"); がある 
*/ 
void fns_attr_list(const char *name) 
{ 	
 FN_composite_name_t *name_comp; 	
 const FN_identifier_t *identifier; 	
 FN_attribute_t *attribute; 	
 const FN_attrvalue_t *values; 	
 char *id, *val; 	
 FN_multigetlist_t *attrset; 	
 void *ip; 	
 FN_status_t *status; 	
 FN_ctx_t *initial_context; 	
 name_comp = fn_composite_name_from_str((unsigned char *) name); 	
 status = fn_status_create(); 	
 /* 初期コンテキストの獲得 */ 	
 initial_context = fn_ctx_handle_from_initial(0, status); 	
 if (!fn_status_is_success(status)) { 		
  fprintf(stderr, "Unable to obtain intial context¥n"); 		
  return; 	
 } 	
 /* 全属性の獲得 */ 	
 attrset = fn_attr_multi_get(initial_context, name_comp, 0, 0,      
        status); 	
 if (!fn_status_is_success(status)) { 		
  fprintf(stderr, "Unable to obtain attributes¥n"); 		
  return; 	} 	
 /* 全属性の表示 */ 	
 while (attribute = fn_multigetlist_next(attrset, status)) { 		
  identifier = fn_attribute_identifier(attribute); 		
  switch(identifier->format) { 		
  case FN_ID_STRING: 			
  id = (char *) malloc(identifier->length + 1); 			
  memcpy(id, identifier->contents, identifier->length); 			
  id[identifier->length] = '¥0'; 			
  printf("Attribute Identifier: %s", id); 			
  free(id); 			
  break; 		
 default: 			
  printf("Attribute of non-string format¥n¥n"); 			
  continue;  	
 } 		
for (values = fn_attribute_first(attribute, &ip); 		 
 values != NULL; 		 
 values = fn_attribute_next(attribute, &ip)) { 			
 val = (char *) malloc(values->length + 1); 			
 memcpy(val, values->contents, values->length); 			
 val[values->length] = '¥0'; 			
 printf("Value: %s", val); 			
  free(val); 		
 } 		
 fn_attribute_destroy(attribute); 		
 printf("¥n"); 	
 } 	
 fn_multigetlist_destroy(attrset); 	
 fn_ctx_destroy(initial_context); 	
 fn_status_destroy(status); 	
 fn_composite_name_destroy(name_comp); 
}