25 #ifndef CASA_HOSTINFOLINUX_H 26 #define CASA_HOSTINFOLINUX_H 28 # if defined(HOSTINFO_DO_IMPLEMENT) 41 #include <sys/types.h> 70 #include <linux/proc_fs.h> 72 #define PROC_SUPER_MAGIC 0x9fa0 75 #define PROCFS "/proc" 76 #define CPUINFO "/proc/cpuinfo" 77 #define MEMINFO "/proc/meminfo" 79 #define bytetok(x) (((x) + 512) >> 10) 83 class HostMachineInfo {
84 friend class HostInfo;
92 ptrdiff_t memory_total;
93 ptrdiff_t memory_used;
94 ptrdiff_t memory_free;
105 skip_ws(
const char *p)
107 while (isspace(*p)) p++;
112 skip_token(
const char *p)
114 while (isspace(*p)) p++;
115 while (*p && !isspace(*p)) p++;
119 HostMachineInfo::HostMachineInfo( ) : valid(1)
125 #ifndef AIPS_CRAY_PGI 129 if (statfs(PROCFS, &sb) < 0 || sb.f_type != PROC_SUPER_MAGIC)
131 fprintf( stderr,
"proc filesystem not mounted on " PROCFS
"\n" );
141 FILE *fptr = fopen(CPUINFO,
"r");
142 while ( (p = fgets( buffer,
sizeof(buffer), fptr )) ) {
143 if ( ! strncmp( p,
"processor", 9 ) ) ++cpus;
152 fd = open(MEMINFO, O_RDONLY);
153 len = read(fd, buffer,
sizeof(buffer)-1);
158 unsigned long mem_total, swp_total;
159 p = strstr(buffer,
"MemTotal:");
160 if ((ret = sscanf (p,
"MemTotal: %lu kB\n", &mem_total)) != 1)
161 cerr <<
"Error parsing MemTotal in /proc/meminfo\n";
162 memory_total = mem_total;
163 p = strstr(buffer,
"SwapTotal:");
164 if ((ret = sscanf (p,
"SwapTotal: %lu kB\n", &swp_total)) != 1)
165 cerr <<
"Error parsing SwapTotal in /proc/meminfo\n";
166 swap_total = swp_total;
170 void HostMachineInfo::update_info( )
179 unsigned long mem_total, mem_free, mem_cached, swp_total, swp_free;
181 fd = open(MEMINFO, O_RDONLY);
182 len = read(fd, buffer,
sizeof(buffer)-1);
186 p = strstr(buffer,
"MemTotal:");
188 if ((ret = sscanf (p,
"MemTotal: %lu kB\nMemFree: %lu kB\n",
189 &mem_total, &mem_free)) != 2)
190 cerr <<
"Error parsing MemTotal and MemFree in /proc/meminfo\n";
192 p = strstr (buffer,
"Cached:");
193 if ((ret = sscanf (p,
"Cached: %lu kB\n", &mem_cached)) != 1)
194 cerr <<
"Error parsing Cached in /proc/meminfo\n";
196 memory_total = mem_total;
197 memory_free = mem_free + mem_cached;
198 memory_used = memory_total - memory_free;
200 p = strstr (buffer,
"SwapTotal:");
201 if ((ret = sscanf (p,
"SwapTotal: %lu kB\nSwapFree: %lu kB\n",
202 &swp_total, &swp_free)) != 2)
203 cerr <<
"Error parsing SwapTotal and SwapFree in /proc/meminfo\n";
205 swap_total = swp_total;
206 swap_free = swp_free;
207 swap_used = swap_total-swap_free;
this file contains all the compiler specific defines