#include #include #include #include #include #include #include #define BUF_SIZE 8196 int main(const int argc, const char **argv) { unsigned int s_size = 0; unsigned int n_level = 0; int i; for (i = 1; i < argc; i++) { if (argv[i][0] != '-') break; else if (!strncmp(argv[i], "-s=", 3)) s_size = atoi(argv[i] + 3); else if (!strncmp(argv[i], "-n=", 3)) n_level = atoi(argv[i] + 3); else if (!strcmp(argv[i], "--help")) { printf("dmesg [-n=L Set console logging level] [-s=S Buffer Size]\n"); 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 */ write(STDOUT_FILENO, buf, n); putchar('\n'); free(buf); return 0; }