У меня есть простая функция для печати размера файла и имени файла:
void *mystat(void *filename) {
struct stat fileStat;
if (lstat(filename,&fileStat) < 0) {
fprintf(stderr, "no such file or directory: %s\n", filename);
return NULL;
}
printf(" %'d",fileStat.st_size);
printf(" %s\n", filename);
}
он отлично работает для небольших файлов, но когда файл большой (пара ГБ), он печатает размер 0
.
Почему это не работает для больших файлов?
EDIT
На самом деле он печатает только размер файла 0
, если размер файла кратен 4GB
. В другом случае, когда файл большой, но не кратный, он печатает отрицательное число.
, но когда я фиксирую код возврата lstat
и печатаю его, это 0
:
ret = lstat(filename,&fileStat)
Я компилирую и запускаю свой код в 64-битной системе.
Очевидно, fileStat.st_size
переполнен, но почему?