home *** CD-ROM | disk | FTP | other *** search
/ Il CD di internet / CD.iso / SOURCE / A / PS / PROCPS-0.000 / PROCPS-0 / procps-0.97 / free.old.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-25  |  1.7 KB  |  80 lines

  1. /* Linus B. Torvalds */
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <ctype.h>
  5. #include <fcntl.h>
  6.  
  7. unsigned char buf[1024];
  8. unsigned long divisor = 1024;
  9.  
  10. volatile void usage(void)
  11. {
  12.         fprintf(stderr,"usage: free [-k] [-b]\n");
  13.         exit(1);
  14. }
  15.  
  16. void prnum(unsigned long num, char * p)
  17. {
  18.         do {
  19.                 p--;
  20.                 *p = '0'+(num % 10);
  21.                 num /= 10;
  22.         } while (num > 0);
  23. }
  24.  
  25. void convert(unsigned char * buf, int size)
  26. {
  27.         int i = 0;
  28.         unsigned int num;
  29.  
  30.         if (divisor == 1)
  31.                 return;
  32.         while (i < size) {
  33.                 if (!isdigit(buf[i])) {
  34.                         i++;
  35.                         continue;
  36.                 }
  37.                 num = buf[i]-'0';
  38.                 buf[i] = ' ';
  39.                 while (++i < size && isdigit(buf[i])) {
  40.                         num *=10;
  41.                         num += buf[i]-'0';
  42.                         buf[i] = ' ';
  43.                 }
  44.                 num /= 1024;
  45.                 prnum(num,buf+i);
  46.         }
  47. }
  48.  
  49. int main(int argc, char ** argv)
  50. {
  51.         int fd, i;
  52.  
  53.         while (argc > 1) {
  54.                 argv++;
  55.                 argc--;
  56.                 if (!strcmp("-k",argv[0]))
  57.                         divisor = 1024;
  58.                 else if (!strcmp("-b",argv[0]))
  59.                         divisor = 1;
  60.                 else
  61.                         usage();
  62.         }
  63.         fd = open("/proc/meminfo",O_RDONLY);
  64.         if (fd < 0) {
  65.                 perror("/proc/meminfo");
  66.                 exit(i);
  67.         }
  68.         i = read(fd,buf,sizeof(buf)-1);
  69.         if (i < 0) {
  70.                 perror("/proc/meminfo");
  71.                 exit(i);
  72.         }
  73.         close(fd);
  74.         convert(buf,i);
  75.         write(1,buf,i);
  76.         return 0;
  77. }
  78.  
  79.  
  80.