[PATCH] show memory for linux

From: Christian Loth (sg618lo@UNIDUI.UNI-DUISBURG.DE)
Date: 07/08/98


Greetings,

  As getrusage doesn't work for linux when it comes to determining
the processes memory usage, another solution had to be found. This
patch introduces a 'show memory' for linux. Would anyone mind testing
it? It's against bpl14. George/Jeremey/etc, if you like it, would you
include it in bpl15?

- Chris

--- act.wizard.orig     Wed Jul  8 20:11:18 1998
+++ act.wizard.c        Wed Jul  8 20:50:35 1998
@@ -8,6 +8,11 @@
 *  CircleMUD is based on DikuMUD, Copyright (C) 1990, 1991.               *
 ************************************************************************ */

+/* Show memory needs a system header not included by sysdep.h */
+#ifdef __linux__
+#  include <fcntl.h>
+#endif
+
 #include "conf.h"
 #include "sysdep.h"

@@ -1911,6 +1916,9 @@
   struct char_data *vict;
   struct obj_data *obj;
   char field[MAX_INPUT_LENGTH], value[MAX_INPUT_LENGTH], birth[80];
+#ifdef __linux__
+  char *c_ptr1, *c_ptr2;
+#endif

   struct show_struct {
     const char *cmd;
@@ -1926,6 +1934,9 @@
     { "godrooms",      LVL_GOD },
     { "shops",         LVL_IMMORT },
     { "houses",                LVL_GOD },
+#ifdef __linux__
+    { "memory",                LVL_IMPL },
+#endif
     { "\n", 0 }
   };

@@ -2063,6 +2074,31 @@
   case 9:
     hcontrol_list_houses(ch);
     break;
+#ifdef __linux__
+  case 10:
+    i = open("/proc/self/status", O_RDONLY);
+    buf1[read(i, buf1, MAX_STRING_LENGTH)] = '\0';
+    close(i);
+    sprintf(buf, "Memory Usage:\r\n");
+    c_ptr1 = strstr(buf1, "VmSize");
+    c_ptr2 = strchr(c_ptr1, '\n');
+    strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+    strcat(buf, "\r\n");
+    c_ptr1 = strstr(c_ptr2, "VmRSS");
+    c_ptr2 = strchr(c_ptr1, '\n');
+    strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+    strcat(buf, "\r\n");
+    c_ptr1 = strstr(c_ptr2, "VmData");
+    c_ptr2 = strchr(c_ptr1, '\n');
+    strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+    strcat(buf, "\r\n");
+    c_ptr1 = strstr(c_ptr2, "VmStk");
+    c_ptr2 = strchr(c_ptr1, '\n');
+    strncat(buf, c_ptr1, c_ptr2 - c_ptr1);
+    strcat(buf, "\r\n");
+    send_to_char(buf, ch);
+    break;
+#endif
   default:
     send_to_char("Sorry, I don't understand that.\r\n", ch);
     break;

--
/----------------------------------------------------------------------------\
| Christian Loth                      | Meet me as the >Shadowdancer< in the |
| chris@rom.mud.de                    |           REALM OF MAGIC             |
| http://rom.mud.de/~chris            | telnet rom.mud.de 4000               |
|                                     | http://rom.mud.de/                   |
|               "The road goes ever on and on!" - Bilbo Baggins              |
\----------------------------------------------------------------------------/


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     | http://democracy.queensu.ca/~fletcher/Circle/list-faq.html |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 12/15/00 PST