2011-04-26 22 views
7

Quiero encontrar el tamaño del archivo en el disco en el sistema operativo Linux. Sé el comando para hacerlo: du -s -h¿Cómo obtener el tamaño de archivo en el disco en Linux?

¿Hay alguna manera de encontrarlo usando el código c/C++?

+0

Mi entendimiento es que el disco duro es un dispositivo de bloque, de forma aunque escribo sólo 10 bytes en un archivo, el núcleo asignará bloques para el archivo en términos de block_size. es decir (512 bytes). Supongamos que el disco tiene un tamaño total de 1 KB y hemos creado 2 archivos de 10 bytes cada uno, entonces el disco está lleno o no. Estoy en lo correcto ? – Ashish

+1

En Linux, la mayoría de los sistemas de archivos usan un tamaño de bloque de 4 KB (es decir, cada bloque fs consta de 8 bloques de 512 bytes en el dispositivo), por lo que no cabrían bloques en un sistema de archivos de 1KB (sin tener en cuenta la sobrecarga de metadatos, etc.). – janneb

+0

lo sé, he dado 1 KB solo por ejemplo. gracias tengo mi respuesta. – Ashish

Respuesta

13

Sí, utilizar la llamada stat(2) sistema:

#include <sys/stat.h> 
... 
struct stat statbuf; 

if (stat("file.dat", &statbuf) == -1) { 
    /* check the value of errno */ 
} 

printf("%9jd", (intmax_t) statbuf.st_size); 
+0

@unapersson Sí, es – cnicutar

+0

Tenga en cuenta que para obtener el tamaño real del disco, tendrá que mirar st_blocks * 512, no st_size – Hasturkun

+1

+1 para la impresión correcta de tipos de enteros grandes. –

Cuestiones relacionadas