diff options
author | Jim Meyering <jim@meyering.net> | 2000-12-19 08:22:18 +0000 |
---|---|---|
committer | Jim Meyering <jim@meyering.net> | 2000-12-19 08:22:18 +0000 |
commit | bca787f7c476396a0a067e0f418d840b2a582945 (patch) | |
tree | 3297d6289f8940168b1c0eaa5883c6bcfc444e4e /lib | |
parent | 258f00968a8e28ae7f69d9cae58094f2f9e988bb (diff) | |
download | coreutils-bca787f7c476396a0a067e0f418d840b2a582945.tar.xz |
*** empty log message ***
Diffstat (limited to 'lib')
-rw-r--r-- | lib/physmem.c | 58 | ||||
-rw-r--r-- | lib/physmem.h | 19 |
2 files changed, 77 insertions, 0 deletions
diff --git a/lib/physmem.c b/lib/physmem.c new file mode 100644 index 000000000..d0e252f1e --- /dev/null +++ b/lib/physmem.c @@ -0,0 +1,58 @@ +/* Calculate the size of physical memory. + Copyright 2000 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2, or (at your option) + any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software Foundation, + Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + +/* Written by Paul Eggert. */ + +#if HAVE_CONFIG_H +# include <config.h> +#endif + +#include "physmem.h" + +#if HAVE_UNISTD_H +# include <unistd.h> +#endif + +/* Return the total amount of physical memory. */ +double +physmem_total (void) +{ +#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE + double pages = sysconf (_SC_PHYS_PAGES); + double pagesize = sysconf (_SC_PAGESIZE); + if (0 <= pages && 0 <= pagesize) + return pages * pagesize; +#endif + + /* Guess 64 MB. It's probably an older host, so guess small. */ + return 64 * 1024 * 1024; +} + +/* Return the amount of physical memory available. */ +double +physmem_available (void) +{ +#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE + double pages = sysconf (_SC_AVPHYS_PAGES); + double pagesize = sysconf (_SC_PAGESIZE); + if (0 <= pages && 0 <= pagesize) + return pages * pagesize; +#endif + + /* Guess 25% of physical memory. */ + return physmem_total () / 4; +} diff --git a/lib/physmem.h b/lib/physmem.h new file mode 100644 index 000000000..d9a98096f --- /dev/null +++ b/lib/physmem.h @@ -0,0 +1,19 @@ +#ifndef PHYSMEM_H_ +# define PHYSMEM_H_ 1 + +# if HAVE_CONFIG_H +# include <config.h> +# endif + +# ifndef PARAMS +# if defined PROTOTYPES || (defined __STDC__ && __STDC__) +# define PARAMS(Args) Args +# else +# define PARAMS(Args) () +# endif +# endif + +double physmem_total PARAMS ((void)); +double physmem_available PARAMS ((void)); + +#endif /* PHYSMEM_H_ */ |