- 论坛徽章:
- 0
|
荡漾在秦淮河水里的忧伤!!!
我是这样做的:
struct vmker {
uint n0,n1,n2,n3,n4,n5,n6,n7,n8;
uint totalmem;
uint badmem; /* this is used in RS/6000 model 220 */
uint freemem;
uint n12;
uint numperm; /* this seems to keep other than text and data segment
usage; name taken from /usr/lpp/bos/samples/vmtune.c */
uint totalvmem,freevmem;
uint n15, n16, n17, n18, n19;
};
static unsigned long sysinfo_offset;
static unsigned long vmker_offset;
struct sysinfo s_info;
struct vmker m_info;
/*取cpu参数*/
getkval(sysinfo_offset, (caddr_t)&s_info, sizeof s_info, "sysinfo" ;
/*取内存参数*/
getkval(vmker_offset, (caddr_t)&m_info, sizeof m_info, "vmker" ;
*/
int getkval(offset, ptr, size, refstr)
unsigned long offset;
caddr_t ptr;
int size;
char *refstr;
{
int upper_2gb = 0;
/* reads above 2Gb are done by seeking to offset%2Gb, and supplying
* 1 (opposed to 0) as fourth parameter to readx (see 'man kmem')
*/
if (offset >; 1<<31) {
upper_2gb = 1;
offset &= 0x7fffffff;
}
if (lseek(kmem, offset, SEEK_SET) != offset) {
return -1;
}
if (readx(kmem, ptr, size, upper_2gb) != size) {
if (*refstr == '!')
return 0;
else {
return -1;
}
}
return 1 ;
} |
|