#include #include #include #include #include #include #include int main(int argc, char **argv) { unsigned int s_size = 0; unsigned int n_level = 0; int opt; while ((opt = getopt(argc, argv, "s:n:")) != -1) { switch (opt) { case 's': s_size = atoi(optarg); break; case 'n': n_level = atoi(optarg); break; default: puts("dmesg [sn]\n\t-n LEVEL Set console logging level\n\t-s SIZE Buffer Size"); return 0; } } /* Setup */ if (n_level) if (klogctl(8, NULL, (long)n_level) < 0) { fprintf(stderr, "dmesg: %s\n", strerror(errno)); return 1; } if (!s_size) s_size = klogctl(10, NULL, 0); /* Get kernel log */ char *buf = malloc(s_size + 1); if (buf == NULL) { fprintf(stderr, "dmesg: malloc failed\n"); return 1; } int n = klogctl(3, buf, s_size); if (n <= 0) { free(buf); if (n == 0) return 0; fprintf(stderr, "dmesg: %s\n", strerror(errno)); return 1; } /* Print */ if (write(STDOUT_FILENO, buf, n) != n) fprintf(stderr, "dmesg: %s\n", strerror(errno)); putchar('\n'); free(buf); return 0; }