aboutsummaryrefslogtreecommitdiff
path: root/src/print_status_on_exit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/print_status_on_exit.c')
-rw-r--r--src/print_status_on_exit.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/src/print_status_on_exit.c b/src/print_status_on_exit.c
new file mode 100644
index 0000000..1d72384
--- /dev/null
+++ b/src/print_status_on_exit.c
@@ -0,0 +1,37 @@
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+static void print_status(void)
+{
+ char buf[4096];
+
+ FILE* status = fopen("/proc/self/status", "r");
+ if (status == NULL)
+ {
+ perror("fopen status");
+ exit(1);
+ }
+
+ FILE* output = fopen("status", "a");
+ if (output == NULL)
+ {
+ perror("fopen output file");
+ exit(1);
+ }
+
+ while (!feof(status))
+ {
+ fgets(&buf, 4096, status);
+ fprintf(output, "%s", buf);
+ }
+ fclose(status);
+}
+
+static void __attribute__((constructor)) init()
+{
+ atexit(print_status);
+}
+