Como obter os logs do kernel Linux em uma aplicação?

- por Sergio Prado

Categorias: Linux Tags: ,

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

  • Jorge Pereira

    so faltou chamar o free() :P

    • Boa Jorge!

      Neste caso não seria necessário porque o kernel desaloca os recursos, incluindo memória alocada, ao finalizar a aplicação. Mas é sempre uma boa prática. :)

      Um abraço!

Navegue
Creative Commons Este trabalho de Sergio Prado é licenciado pelo
Creative Commons BY-NC-SA 3.0.