Bazat pe codul lui NilObject:
#include
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}
Schimbări:
- S-a făcut argumentul
const char
- S-a corectat definiția
struct stat
, din care lipsea numele variabilei.
- Returneaza
-1
pentru eroare in loc de 0
, ceea ce ar fi ambiguu pentru un fisier gol. off_t
este un tip semnat, astfel încât acest lucru este posibil.
Dacă doriți fsize()
pentru a imprima un mesaj pe eroare, puteți folosi acest lucru:
#include
#include
#include
#include
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
fprintf(stderr, "Cannot determine size of %s: %s\n",
filename, strerror(errno));
return -1;
}
La sistemele pe 32 de biți trebuie să compilați această opțiune cu -D_FILE_OFFSET_BITS = 64
, altfel off_t
va menține valori de până la 2 GB. Vedeți secțiunea "Utilizarea LFS" din Suport pentru fișiere mari în Linux pentru detalii.