ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/memory_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/memory_stats.c (file contents):
Revision 1.13 by ats, Sun Oct 19 02:11:50 2003 UTC vs.
Revision 1.16 by ats, Fri Oct 24 17:26:43 2003 UTC

# Line 32 | Line 32
32   #include <stdio.h>
33   #include <string.h>
34   #endif
35 #ifdef ALLBSD
35   #ifdef FREEBSD
36   #include <sys/types.h>
37   #include <sys/sysctl.h>
39 #else
40 #include <sys/param.h>
41 #include <sys/sysctl.h>
42 #endif
38   #include <unistd.h>
39   #endif
40  
# Line 56 | Line 51 | mem_stat_t *get_memory_stats(){
51   #endif
52   #ifdef LINUX
53          char *line_ptr;
54 +        unsigned long long value;
55          FILE *f;
56   #endif
61 #ifdef ALLBSD
62        int mib[2];
57   #ifdef FREEBSD
58 +        int mib[2];
59 +        u_long physmem;
60 +        size_t size;
61          u_int free_count;
62          u_int cache_count;
63          u_int inactive_count;
# Line 69 | Line 66 | mem_stat_t *get_memory_stats(){
66   #ifdef NETBSD
67          struct uvmexp *uvm;
68   #endif
72        u_long physmem;
73        size_t size;
74 #endif
69  
70   #ifdef SOLARIS
71          if((pagesize=sysconf(_SC_PAGESIZE)) == -1){
# Line 102 | Line 96 | mem_stat_t *get_memory_stats(){
96   #endif
97  
98   #ifdef LINUX
99 <        f=fopen("/proc/meminfo", "r");
106 <        if(f==NULL){
99 >        if ((f = fopen("/proc/meminfo", "r")) == NULL) {
100                  return NULL;
101          }
102  
103 <        if((line_ptr=f_read_line(f, "Mem:"))==NULL){
104 <                fclose(f);
105 <                return NULL;
106 <        }
103 >        while ((line_ptr = f_read_line(f, "")) != NULL) {
104 >                if (sscanf(line_ptr, "%*s %llu kB", &value) != 1) {
105 >                        continue;
106 >                }
107 >                value *= 1024;
108  
109 <        fclose(f);
110 <
111 <        /* Linux actually stores this as a unsigned long long, but
112 <         * our structures are just long longs. This shouldn't be a
113 <         * problem for sometime yet :)
114 <         */
115 <        if((sscanf(line_ptr,"Mem:  %lld %lld %lld %*d %*d %lld", \
122 <                &mem_stat.total, \
123 <                &mem_stat.used, \
124 <                &mem_stat.free, \
125 <                &mem_stat.cache))!=4){
126 <                        return NULL;
109 >                if (strncmp(line_ptr, "MemTotal:", 9) == 0) {
110 >                        mem_stat.total = value;
111 >                } else if (strncmp(line_ptr, "MemFree:", 8) == 0) {
112 >                        mem_stat.free = value;
113 >                } else if (strncmp(line_ptr, "Cached:", 7) == 0) {
114 >                        mem_stat.cache = value;
115 >                }
116          }
117  
118 +        fclose(f);
119 +        mem_stat.used = mem_stat.total - mem_stat.free;
120   #endif
121  
122 < #ifdef ALLBSD
122 > #ifdef FREEBSD
123          /* Returns bytes */
124          mib[0] = CTL_HW;
125          mib[1] = HW_PHYSMEM;
# Line 139 | Line 130 | mem_stat_t *get_memory_stats(){
130          mem_stat.total = physmem;
131  
132          /*returns pages*/
142 #ifdef FREEBSD
133          size = sizeof free_count;
134          if (sysctlbyname("vm.stats.vm.v_free_count", &free_count, &size, NULL, 0) < 0){
135                  return NULL;
# Line 171 | Line 161 | mem_stat_t *get_memory_stats(){
161          mem_stat.free=(free_count*pagesize)+(inactive_count*pagesize);
162          mem_stat.used=physmem-mem_stat.free;
163   #endif
164 +
165   #ifdef NETBSD
175        /* FIXME This is not consistent with the FreeBSD logic above. */
166          if ((uvm = get_uvmexp()) == NULL) {
167                  return NULL;
168          }
169 +        mem_stat.total = uvm->pagesize * uvm->npages;
170          mem_stat.cache = uvm->pagesize * (uvm->filepages + uvm->execpages);
171 <        mem_stat.free = uvm->pagesize * uvm->free;
172 <        mem_stat.used = uvm->pagesize * (uvm->npages - uvm->free);
171 >        mem_stat.free = uvm->pagesize * (uvm->free + uvm->inactive);
172 >        mem_stat.used = mem_stat.total - mem_stat.free;
173   #endif
183 #endif
174  
175          return &mem_stat;
186
176   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines