status-mem/mem.c
author Stiletto <blasux@blasux.ru>
Mon, 17 Oct 2016 14:23:58 +0400
changeset 15 163e96e2b941
parent 13 d7ce3b1dddc4
permissions -rw-r--r--
[status-mem] MemAvailable support
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     1
#define _DEFAULT_SOURCE
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     2
#include <stdio.h>
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     3
#include <stdlib.h>
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     4
#include <unistd.h>
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     5
#include <string.h>
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     6
#include <errno.h>
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     7
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     8
#include "config.h"
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
     9
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    10
int
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    11
main(void)
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    12
{
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    13
    while (1) {
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    14
        char line[513];
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    15
        FILE *fd;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    16
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    17
        fd = fopen("/proc/meminfo", "r");
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    18
        if (fd == NULL) {
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    19
            perror("fopen");
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    20
            exit(1);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    21
        }
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    22
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    23
        int free = 0;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    24
        int total = 0;
15
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    25
        int avail = -1;
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    26
        int sub;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    27
        while (!feof(fd)) {
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    28
            if (fgets(line, sizeof(line)-1, fd) == NULL)
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    29
                break;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    30
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    31
            if (!strncmp(line, "MemTotal", 8))
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    32
                sscanf(line+9, "%*[ ]%d%*[^\n]", &total);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    33
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    34
            if (!strncmp(line, "MemFree", 7))
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    35
                sscanf(line+8, "%*[ ]%d%*[^\n]", &free);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    36
15
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    37
            if (!strncmp(line, "MemAvailable", 12)) {
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    38
                sscanf(line+13, "%*[ ]%d%*[^\n]", &sub);
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    39
                avail = sub;
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    40
            }
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    41
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    42
            if (!strncmp(line, "Buffers", 7)) {
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    43
                sscanf(line+8, "%*[ ]%d%*[^\n]", &sub);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    44
                free += sub;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    45
            }
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    46
            if (!strncmp(line, "Cached", 6)) {
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    47
                sscanf(line+7, "%*[ ]%d%*[^\n]", &sub);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    48
                free += sub;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    49
            }
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    50
        }
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    51
        fclose(fd);
15
163e96e2b941 [status-mem] MemAvailable support
Stiletto <blasux@blasux.ru>
parents: 13
diff changeset
    52
        if (avail != -1) free = avail;
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    53
        int used = total - free;
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    54
3
dae770da6416 Pango markup is now optional
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    55
#ifdef PANGO_MARKUP
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    56
        char *color;
13
d7ce3b1dddc4 Proper colors
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
    57
        if (used*1.0/total < GREEN) color = "color='#0f0'";
d7ce3b1dddc4 Proper colors
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
    58
        else if (used*1.0/total > RED) color = "color='#f33'";
d7ce3b1dddc4 Proper colors
Stiletto <blasux@blasux.ru>
parents: 3
diff changeset
    59
        else if (used*1.0/total > ORANGE) color = "color='#fa0'";
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    60
        else color = "";
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    61
        printf("<span %s>%d/%d</span>\n", color, used/1024, total/1024);
3
dae770da6416 Pango markup is now optional
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    62
#else
dae770da6416 Pango markup is now optional
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    63
        printf("%d/%d\n", used/1024, total/1024);
dae770da6416 Pango markup is now optional
Stiletto <blasux@blasux.ru>
parents: 1
diff changeset
    64
#endif
1
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    65
        fflush(stdout);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    66
	sleep(UPDATE_PERIOD);
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    67
    }
3e9290bf7249 Some sample status scripts
Stiletto <blasux@blasux.ru>
parents:
diff changeset
    68
}