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], &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