#define _GNU_SOURCE 1 #include #include #include int main(void) { size_t linelen = 0; char *line = NULL; unsigned long freemem = 0; FILE *f = fopen("/proc/meminfo", "r"); while (getdelim(&line, &linelen, '\n', f) > 0) { if (sscanf(line, "LowFree: %lu", &freemem) == 1) break; } freemem *= 1024; freemem -= freemem/30; char *s = malloc(freemem); if (s) { long i; for (;;) { printf("\nwrite\n"); for (i = 0; i < freemem; i += 30*1024*1024) { long w = freemem - i; if (w > 30*1024*1024) w = 30*1024*1024; memset(s + i, 0xff, w); putchar('.'); fflush(stdout); } printf("\nread\n"); for (i = 0; i < freemem; i += 30*1024*1024) { long w = freemem - i; if (w > 30*1024*1024) w = 30*1024*1024; memcpy(s, s + i, w); putchar('.'); fflush(stdout); } } } else printf("Cannot allocate memory\n"); return 0; }