Como obter informações de disco livre e ocupado em C no Linux

binary data

Obter informações de disco (espaço livre e ocupado) é uma das coisas mais comuns a todos os usuários de computadores e sistemas computacionais (smartphones e tablets, por exemplo). Porém, as vezes é necessário obter tais informações “programaticamente”, ou seja, um programa pode precisar requisitar este tipo de informação ao Sistema Operacional. As finalidades desse tipo de informação são diversas, como por exemplo: por puro conhecimento do espaço livre e usado em disco (para exibição ao usuário), telemetria de informações de disco via Internet ou rede local, saber se algum determinado recurso pode ser instalado considerando o espaço livre em disco, etc.

Este artigo, no formato de dicas e truques, mostrará uma forma de se obter informações do disco (incluindo espaço livre e ocupado em disco) programaticamente em C, considerando como sistema operacional o Linux.

A API statvfs

A API statvfs tem como finalidade permitir que sejam obtidas diversas informações de disco livre e/ou ocupado. Nativamente presente no Linux, esta API pode ser utilizada em C.

Por se tratar de algo nativo, significa que um programa que faz uso dela pode ser compilado, em teoria, em qualquer distribuição Linux, algo muito valioso visando distribuição e uso em massa de um programa.

O uso da statvfs

O uso da statvfs é simples. Primeiramente, seu programa deve incluir o header file sys/statvfs.h, conforme mostrado abaixo:

E há apenas uma função a ser utilizada, a própria statvfs. O protótipo da função ststvfs está abaixo:

Onde os parâmetros significam:

  • const char *path: ponteiro para um array de char contendo o caminho/path do disco das quais serão obtidas as informações;
  • struct statvfs *buf: ponteiro para uma estrutura do tipo statvfs, a qual conterá todas as informações disponíveis pela API após a execução da função.

A estrutura statvfs possui em seus elementos todas as informações possíveis de serem obtidas com a API. Na figura 1 estão presentes as informações (nome dos elementos da estrutura) e o que significam. 

Figura 1 - Estrutura statvfs para obter informações de disco (espaço livre e ocupado).
Figura 1 – Estrutura statvfs para obter informações de disco (espaço livre e ocupado). (fonte: http://man7.org/linux/man-pages/man3/statvfs.3.html)

IMPORTANTE: os tipos fsblkcnt_t e fsfilcnt_t são equivalentes a unsigned long.

Código-fonte – exemplo

Abaixo segue um código-fonte que exemplifica o uso da statvfs:

Cole o código-fonte em um editor de sua escolha e salve o arquivo como InfoDiscos.c. Para fazer a compilação, nenhuma biblioteca em especial é necessária, portanto a copilação pode ser feita da seguinte maneira:

E a execução é feita conforme abaixo:

Indo além – Telemetria de uso de disco pela Internet

Uma coisa que fiz em um servidor de arquivos que montei na minha casa (saiba mais lendo este artigo) foi monitorar pela Internet a porcentagem de disco ocupada do servidor, assim como o espaço ocupado. Isso foi feito utilizando a própria statvfs e uma biblioteca de minha autoria chamada ThingSpeakC. Isso me permite, de qualquer lugar do mundo com conexão à Internet, saber estas informações do meu servidor, de modo que eu consiga tomar decisão de buscar por mais espaço ou não. Além disso, um histórico destas informações fica gravado no próprio ThingSpeak, permitindo saber inclusive quando e como as medições variaram.

Portanto, aplicações simples e úteis podem ser feitas da mesma forma, utilizando plataformas Cloud como o ThingSpeak ou similares. Se quiser um exemplo de projeto usando esta “arquitetura”, veja aqui.

Saiba mais

Servidor de arquivos Nextcloud na Orange PI PC Plus H3

Software serial: Como fazer?

Enviando temperatura dos núcleos da Raspberry Pi 3 para o ThingSpeak em C

Referências

Licença Creative Commons Esta obra está licenciada com uma Licença Creative Commons Atribuição-CompartilhaIgual 4.0 Internacional.

Receba os melhores conteúdos sobre sistemas eletrônicos embarcados, dicas, tutoriais e promoções.

[wpseo_breadcrumb]
Comentários:
Notificações
Notificar
guest
0 Comentários
Inline Feedbacks
View all comments
Talvez você goste:

Séries

Menu
Privacy Settings saved!
Configurações de Privacidade

Entenda quais dados e informações usamos para ter melhor entrega de conteúdo personalizado para você.

These cookies are necessary for the website to function and cannot be switched off in our systems.

Para usar este site, usamos os seguintes cookies tecnicamente exigidos

  • wordpress_test_cookie
  • wordpress_logged_in_
  • wordpress_sec

Decline all Services
Accept all Services