На основе кода NilObject:
#include
#include
off_t fsize(const char *filename) {
struct stat st;
if (stat(filename, &st) == 0)
return st.st_size;
return -1;
}
Изменения:
const char
. struct stat
, в котором отсутствовало имя переменной. -1
при ошибке вместо 0
, что было бы неоднозначным для пустого файла. off_t
является подписанным типом, поэтому это возможно. Если вы хотите fsize()
распечатать сообщение об ошибке, вы можете использовать это:
#include
#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;
}
В 32-битных системах вы должны скомпилировать это с помощью опции -D_FILE_OFFSET_BITS=64
, иначе off_t
будет содержать только значения до 2 ГБ. Подробнее см. Раздел «Использование LFS» в Поддержка больших файлов в Linux .