.:: Jorge Pereira ::.

- Acessando quantidade de espaço de uma partição

Esses dias estive desenvolvendo uma feature de um sistema na qual existe uma regra de negócio para os arquivos a ser salvos em um determinado dispositivo, precisando saber se existe espaço entre outras verificações. conversando com um amigo ele disse que precisou fazer isto outro dia e não tinha encontrado muita coisa sobre o assunto, como estava com o código na mão resolvi mostrar um simples exemplo com o mesmo comportamento do comando df encontrado em qualquer Unix.


/*
* Source: statfs.c
* Autor: Jorge Pereira
* Data: Tue Jul 29 09:35:42 BRT 2008
* Desc: Exemplo acessando a quantidade de espaço de uma partição no Linux.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <stdint.h>
#include <sys/vfs.h>

inline long _tok(long b, long bs)
{
return ( b * (long long) bs + 1024 / 2 ) / 1024;
}

int main(int argc, char *argv[])
{
struct statfs s;

if (argc < 2)
{
printf ("Usage: %s \n", argv[0]);
exit (1);
}

if (statfs(argv[1], &amp;s) != 0)
{
printf ("Problemas ao tentar abrir (%s), msg='%s'\n", argv[1], strerror(errno));
exit (1);
}

printf(" + SYSTEMA ARQUIVOS: (%s) \n", argv[1]);
printf(" +-- CAPACIDADE:     (%lu)\n", _tok(s.f_blocks, s.f_bsize));
printf(" +-- OCUPADO:        (%lu)\n", _tok(s.f_blocks-s.f_bfree, s.f_bsize));
printf(" +-- LIVRE:          (%lu)\n", _tok(s.f_bavail, s.f_bsize));

return EXIT_SUCCESS;
}

Basta compilar, e executar o exemplo conforme abaixo.

[jorge@jiraya c]$ gcc -o statfs statfs.c
[jorge@jiraya c]$ pwd
/home/codes/c
[jorge@jiraya c]$ ./statfs $PWD
+ SYSTEMA ARQUIVOS: (/home/codigos/c)
+– CAPACIDADE: (48444420)
+– OCUPADO: (13660960)
+– LIVRE: (32341984)
[jorge@jiraya c]$ df $PWD
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 48444420 13660960 32341984 30% /home
[jorge@jiraya c]$

0 Comments on “- Acessando quantidade de espaço de uma partição”

Leave a Comment