1 /* 2 * Copyright (c) 2005-2007 Sendmail, Inc. and its suppliers. 3 * All rights reserved. 4 * 5 * By using this file, you agree to the terms and conditions set 6 * forth in the LICENSE file which can be found at the top level of 7 * the sendmail distribution. 8 */ 9 10 #pragma ident "%Z%%M% %I% %E% SMI" 11 12 #include <sm/gen.h> 13 SM_IDSTR(id, "@(#)$Id: t-memstat.c,v 1.9 2007/03/14 21:41:09 ca Exp $") 14 15 #include <sm/misc.h> 16 17 /* 18 ** Simple test program for memstat 19 */ 20 21 #include <stdlib.h> 22 #include <unistd.h> 23 #include <stdio.h> 24 #include <strings.h> 25 #include <string.h> 26 27 extern char *optarg; 28 extern int optind; 29 30 void 31 usage(prg) 32 char *prg; 33 { 34 fprintf(stderr, "usage: %s [options]\n", prg); 35 fprintf(stderr, "options:\n"); 36 fprintf(stderr, "-l n loop n times\n"); 37 fprintf(stderr, "-m n allocate n bytes per iteration\n"); 38 fprintf(stderr, "-r name use name as resource to query\n"); 39 fprintf(stderr, "-s n sleep n seconds per iteration\n"); 40 } 41 42 int 43 main(argc, argv) 44 int argc; 45 char **argv; 46 { 47 int r, r2, i, l, slp, sz; 48 long v; 49 char *resource; 50 51 l = 1; 52 sz = slp = 0; 53 resource = NULL; 54 while ((r = getopt(argc, argv, "l:m:r:s:")) != -1) 55 { 56 switch ((char) r) 57 { 58 case 'l': 59 l = strtol(optarg, NULL, 0); 60 break; 61 62 case 'm': 63 sz = strtol(optarg, NULL, 0); 64 break; 65 66 case 'r': 67 resource = strdup(optarg); 68 break; 69 70 case 's': 71 slp = strtol(optarg, NULL, 0); 72 break; 73 74 default: 75 usage(argv[0]); 76 exit(1); 77 } 78 } 79 80 r = sm_memstat_open(); 81 r2 = -1; 82 for (i = 0; i < l; i++) 83 { 84 char *mem; 85 86 r2 = sm_memstat_get(resource, &v); 87 if (slp > 0 && i + 1 < l && 0 == r) 88 { 89 printf("open=%d, memstat=%d, %s=%ld\n", r, r2, 90 resource != NULL ? resource : "default-value", 91 v); 92 sleep(slp); 93 if (sz > 0) 94 { 95 /* 96 ** Just allocate some memory to test the 97 ** values that are returned. 98 ** Note: this is a memory leak, but that 99 ** doesn't matter here. 100 */ 101 102 mem = malloc(sz); 103 if (NULL == mem) 104 printf("malloc(%d) failed\n", sz); 105 } 106 } 107 } 108 printf("open=%d, memstat=%d, %s=%ld\n", r, r2, 109 resource != NULL ? resource : "default-value", v); 110 r = sm_memstat_close(); 111 return r; 112 } 113