#include #include #include #include // The following define is needed for SGI IRIX 6.2 #define _KMEMUSER #include #include #include #ifndef UBSIZE #define UBSIZE 512 #endif void KMemoryWidget::update() { int pagesize = getpagesize(); struct rminfo rmi; if( sysmp(MP_SAGET, MPSA_RMINFO, &rmi, sizeof(rmi)) == -1 ) return; Memory_Info[TOTAL_MEM] = MEMORY(rmi.physmem) * pagesize; // total physical memory (without swaps) Memory_Info[FREE_MEM] = MEMORY(rmi.freemem) * pagesize; // total free physical memory (without swaps) Memory_Info[BUFFER_MEM] = MEMORY(rmi.bufmem) * pagesize; //FIXME: Memory_Info[CACHED_MEM]" Memory_Info[CACHED_MEM] = NO_MEMORY_INFO; // cached memory in ram long val; swapctl(SC_GETSWAPTOT, &val); Memory_Info[SWAP_MEM] = MEMORY(val) * UBSIZE; // total size of all swap-partitions swapctl(SC_GETFREESWAP, &val); Memory_Info[FREESWAP_MEM] = MEMORY(val) * UBSIZE; // free memory in swap-partitions #ifndef MPKA_SHMINFO /* Irix 6.5 (also 6.4?) */ Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; #else FILE *kmem = fopen("/dev/kmem", "r"); if( kmem == 0 ) { Memory_Info[SHARED_MEM] = NO_MEMORY_INFO; return; } long shmip = sysmp(MP_KERNADDR, MPKA_SHMINFO); fseek( kmem, shmip, 0 ); struct shminfo shmi; fread( &shmi, sizeof(shmi), 1, kmem ); long shmem = sysmp(MP_KERNADDR, MPKA_SHM); val = 0; long pos; struct shmid_ds shmid; for( int i=0 ; i