test_binary_array.c
上传用户:wxp200602
上传日期:2007-10-30
资源大小:4028k
文件大小:4k
源码类别:

SNMP编程

开发平台:

Unix_Linux

  1. #include <net-snmp/net-snmp-config.h>
  2. #if HAVE_IO_H
  3. #include <io.h>
  4. #endif
  5. #include <stdio.h>
  6. #if HAVE_STDLIB_H
  7. #include <stdlib.h>
  8. #endif
  9. #if HAVE_MALLOC_H
  10. #include <malloc.h>
  11. #endif
  12. #include <sys/types.h>
  13. #if HAVE_STRING_H
  14. #include <string.h>
  15. #else
  16. #include <strings.h>
  17. #endif
  18. #include <net-snmp/net-snmp-includes.h>
  19. #include <net-snmp/types.h>
  20. #include <net-snmp/library/snmp_api.h>
  21. #include <net-snmp/library/container.h>
  22. #include <net-snmp/library/container_binary_array.h>
  23. #include <net-snmp/library/tools.h>
  24. #include <net-snmp/library/snmp_assert.h>
  25. #define TEST_SIZE 7
  26. void
  27. print_int(netsnmp_index *i, void *v)
  28. {
  29.     printf("item %p = %ldn", i, i->oids[0]);
  30. }
  31. int
  32. test_int(void)
  33. {
  34.     oid o1 = 1;
  35.     oid o2 = 2;
  36.     oid o3 = 6;
  37.     oid o4 = 8;
  38.     oid o5 = 9;
  39.     oid ox = 7;
  40.     oid oy = 10;
  41.     netsnmp_index i1,i2,i3,i4,i5,ix,iy, *ip;
  42.     netsnmp_index *a[TEST_SIZE] = { &i1, &i2, &i3, &ix, &i4, &i5, &iy };
  43.     netsnmp_container *c = netsnmp_container_get_binary_array();
  44.     int i;
  45.     c->compare = netsnmp_compare_netsnmp_index;
  46.     
  47.     i1.oids = &o1;
  48.     i2.oids = &o2;
  49.     i3.oids = &o3;
  50.     i4.oids = &o4;
  51.     i5.oids = &o5;
  52.     ix.oids = &ox;
  53.     iy.oids = &oy;
  54.     i1.len = i2.len = i3.len = i4.len = i5.len = ix.len = iy.len = 1;
  55.     printf("Creating container...n");
  56.     printf("Inserting data...n");
  57.     CONTAINER_INSERT(c,&i4);
  58.     CONTAINER_INSERT(c,&i2);
  59.     CONTAINER_INSERT(c,&i3);
  60.     CONTAINER_INSERT(c,&i1);
  61.     CONTAINER_INSERT(c,&i5);
  62.     printf("For each...n");
  63.     CONTAINER_FOR_EACH(c, print_int, NULL);
  64.     printf("Done.n");
  65.     printf("n");
  66.     ip = CONTAINER_FIRST(c);
  67.     printf("Find first = %p %ldn",ip, ip->oids[0]);
  68.     while( ip ) {
  69.         ip = CONTAINER_NEXT(c,ip);
  70.         if(ip)
  71.             printf("Find next = %p %ldn",ip, ip->oids[0]);
  72.         else
  73.             printf("Find next = %sn",ip);
  74.     }
  75.     for( i=0; i < TEST_SIZE; ++i) {
  76.         printf("n");
  77.         ip = CONTAINER_FIND(c,a[i]);
  78.         printf("Find %ld = %p %ldn", a[i]->oids[0], ip, ip ? ip->oids[0] : 0);
  79.         ip = CONTAINER_NEXT(c,a[i]);
  80.         printf("Next %ld = %p %ldn", a[i]->oids[0], ip, ip ? ip->oids[0] : 0);
  81.     }
  82.     printf("Done.n");
  83.     return 0;
  84. }
  85. void
  86. print_string(char *i, void *v)
  87. {
  88.     printf("item %sn", i);
  89. }
  90. int
  91. my_strcmp(char *lhs, char *rhs)
  92. {
  93.     int rc = strcmp(lhs,rhs);
  94. /*      printf("%s %d %sn",lhs, rc, rhs); */
  95.     return rc;
  96. }
  97. int
  98. test_string()
  99. {
  100.     const char *o1 = "zebra";
  101.     const char *o2 = "b-two";
  102.     const char *o3 = "b";
  103.     const char *o4 = "cedar";
  104.     const char *o5 = "alpha";
  105.     const char *ox = "dev";
  106.     const char *oy = "aa";
  107.     const char * ip;
  108.     
  109.     const char *a[TEST_SIZE] = { o1, o2, o3, ox, o4, o5, oy };
  110.     netsnmp_container *c = netsnmp_container_get_binary_array();
  111.     int i;
  112.     c->compare = my_strcmp;
  113.     
  114.     printf("Creating container...n");
  115.     printf("Inserting data...n");
  116.     CONTAINER_INSERT(c,o4);
  117.     CONTAINER_INSERT(c,o2);
  118.     CONTAINER_INSERT(c,o3);
  119.     CONTAINER_INSERT(c,o1);
  120.     CONTAINER_INSERT(c,o5);
  121.     printf("n");
  122.     printf("For each...n");
  123.     CONTAINER_FOR_EACH(c, print_string, NULL);
  124.     printf("Done.n");
  125.     printf("n");
  126.     ip = CONTAINER_FIRST(c);
  127.     printf("Find first = %sn",ip);
  128.     while( ip ) {
  129.         ip = CONTAINER_NEXT(c,ip);
  130.         printf("Find next = %sn",ip);
  131.     }
  132.     for( i=0; i < TEST_SIZE; ++i) {
  133.         printf("n");
  134.         ip = CONTAINER_FIND(c,a[i]);
  135.         printf("Find %s = %sn", a[i], ip);
  136.         ip = CONTAINER_NEXT(c,a[i]);
  137.         printf("Next %s = %sn", a[i], ip);
  138.     }
  139.     printf("Done.n");
  140.     return 0;
  141. }
  142. int
  143. main(int argc, char** argv)
  144. {
  145.     test_int();
  146.     test_string();
  147. }