ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/group/trunk/OOPSE-4/src/utils/residentMem.c
Revision: 2029
Committed: Tue Feb 15 15:17:01 2005 UTC (19 years, 4 months ago) by gezelter
Content type: text/plain
File size: 1200 byte(s)
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 gezelter 2024 #include <config.h>
2     #include <string.h>
3     #include <stdio.h>
4 gezelter 2029 #include <stdlib.h>
5     #ifdef __sgi
6     #include <unistd.h>
7     #endif
8 gezelter 2024
9 gezelter 2027 #define to_string( s ) # s
10     #define STR_DEFINE(t, s) t = to_string(s)
11    
12 gezelter 2029 /*
13     * returns an estimate of the resident memory size in kB
14     */
15 gezelter 2024 double residentMem () {
16    
17     FILE* procresults;
18     char buf[150];
19     char* foo;
20     long int myRSS, totRSS;
21 gezelter 2026 char pscommand[150];
22 gezelter 2027 char* psPath;
23 gezelter 2024
24 gezelter 2027 STR_DEFINE(psPath, PSCOMMAND );
25 gezelter 2028
26     // null terminated string is one longer....
27     strncpy(pscommand, psPath, strlen(psPath)+1);
28 gezelter 2024
29 gezelter 2029 #ifdef PSTYPE_IS_BSD
30 gezelter 2024 strcat(pscommand, " ax -o rss");
31     #else
32 gezelter 2029 #ifdef PSTYPE_IS_POSIX
33 gezelter 2024 strcat(pscommand, " -ef -o rss");
34 gezelter 2029 #else
35     printf("Unknown ps syntax!\n");
36 gezelter 2024 #endif
37 gezelter 2029 #endif
38 gezelter 2024
39 gezelter 2028 printf("doing %s\n", pscommand);
40    
41 gezelter 2024 procresults = popen(pscommand, "r");
42    
43     totRSS = 0;
44     while (!feof(procresults)) {
45     fgets( buf, 150, procresults);
46     if (!strcmp(buf, " RSS")) continue;
47    
48     foo = strtok(buf, " ,;\t");
49     myRSS = atoi(foo);
50     totRSS += myRSS;
51     }
52     pclose(procresults);
53    
54 gezelter 2029 #ifdef __sgi
55     // Damn IRIX machines uses pages for RSS and pagesize is variable
56     // depending on version of the OS.
57     totRSS *= getpagesize() / 1024;
58     #endif
59    
60 gezelter 2024 return(totRSS);
61    
62     }