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.

[sourcecode language=’cpp’]
/*
* 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
#include
#include
#include
#include
#include

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], &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; } [/sourcecode] 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]$