This is memory.c in view mode; [Download] [Up]
/*
* Copyright (c) 1992 Michael A. Cooper.
* This software may be freely distributed provided it is not sold for
* profit and the author is credited appropriately.
*/
#ifndef lint
static char *RCSid = "$Header: /src/common/usc/bin/sysinfo/RCS/memory.c,v 1.12 1992/11/24 04:05:57 mcooper Exp mcooper $";
#endif
/*
* $Log: memory.c,v $
* Revision 1.12 1992/11/24 04:05:57 mcooper
* New/cleaner KVM/nlist interface.
*
* Revision 1.11 1992/11/23 23:17:33 mcooper
* Make DivRndUp extern.
*
* Revision 1.10 1992/07/07 23:28:38 mcooper
* Put wrapper macro around nlist stuff to fix NeXT/Mach declaration
* problem. Now works with NeXT 2.* cc compiler.
*
* Revision 1.9 1992/04/26 23:32:06 mcooper
* Add Copyright notice
*
* Revision 1.8 1992/04/17 01:07:59 mcooper
* More de-linting
*
* Revision 1.7 1992/04/16 02:25:39 mcooper
* Bug fixes, de-linting, and other changes found with CodeCenter.
*
* Revision 1.6 1992/03/31 02:35:53 mcooper
* Change "nl" to "PhysmemNL".
*
* Revision 1.5 1992/03/31 01:55:17 mcooper
* Use new CheckNlist to check nlist success.
*
* Revision 1.4 1992/03/31 00:22:54 mcooper
* Add ctob() comment.
*
* Revision 1.3 1992/03/31 00:15:09 mcooper
* Add error check for nlist.n_type.
*
* Revision 1.2 1992/03/28 23:13:07 mcooper
* Don't set memory if == 0.
*
* Revision 1.1 1992/03/22 00:20:10 mcooper
* Initial revision
*
*/
/*
* Memory related functions.
*/
#include <stdio.h>
#include "system.h"
#include "defs.h"
/*
* Divide and Round Up
*/
extern int DivRndUp(Num, Div)
unsigned long Num;
unsigned long Div;
{
int i;
i = Num / Div;
return((Num % Div) ? i+1 : i);
}
#if defined(HAVE_KVM) && defined(HAVE_NLIST)
#include <fcntl.h>
#include <nlist.h>
static char PhysmemSYM[] = "_physmem";
/*
* Common method of determining amount of physical memory in a
* BSD Unix machine.
*
* Get memory by reading the variable "physmem" from the kernel
* and the system page size.
*/
extern char *GetMemoryFromPhysmem()
{
struct nlist *nlptr;
static char Buf[BUFSIZ];
unsigned long NPages, Bytes;
int Amount = -1;
kvm_t *kd;
if (kd = KVMopen()) {
if ((nlptr = KVMnlist(kd, PhysmemSYM, (struct nlist *)NULL)) == NULL)
return((char *) NULL);
if (CheckNlist(nlptr))
return((char *) NULL);
if (KVMread(kd, nlptr->n_value, (char *)&NPages,
sizeof(NPages)) >= 0) {
/*
* Could use ctob() instead of "Page Size * Num Pages",
* but this is more portable.
*/
Bytes = (long) (getpagesize() * NPages);
if (Debug)
printf("Bytes = %d NPages = %d pagesize = %d\n",
Bytes, NPages, getpagesize());
Amount = DivRndUp(Bytes, MBYTES);
}
}
if (kd)
KVMclose(kd);
if (Amount > 0) {
(void) sprintf(Buf, "%d MB", Amount);
return(Buf);
} else
return((char *) NULL);
}
#endif /* HAVE_KVM && HAVE_NLIST */
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.