Como obter os logs do kernel Linux em uma aplicação?
- por Sergio Prado
Recebi um e-mail com esta pergunta de um leitor do blog, e resolvi compartilhar a resposta em um artigo.
Na verdade é bem fácil ler os logs do kernel em uma aplicação Linux. Basta utilizar a chamada de sistema klogctl(), cujo acesso é provido por uma função wrapper da glibc:
$ man klogctl |
A aplicação abaixo utiliza esta função para ler todo o log do kernel e imprimir na saída padrão do programa.
Na linha 11 estou lendo o tamanho do buffer de log do kernel para alocar um buffer na linha 13. Então leio o log do kernel para o buffer alocado na linha 19 e imprimo na saida padrão do programa na linha 22.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
#include <stdio.h> #include <stdlib.h> #include <sys/klog.h> int main(int argc, const char *argv[]) { int kernel_log_size; int bytes_read; char *buf; kernel_log_size = klogctl(10, NULL, 0); buf = (char *)malloc(kernel_log_size); if (buf == NULL) { printf("Error allocating memory!\n"); return 1; } bytes_read = klogctl(3, buf, kernel_log_size - 1); if (bytes_read > 0) { buf[bytes_read] = 0; puts(buf); } free(buf); return 0; } |
Fácil, não? :-)
Happy coding!
Sergio Prado