Решено: stat(2) для файлов > 2 Гб (Возвращает ошибку)

Модератор: Модераторы разделов

Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu

Решено: stat(2) для файлов > 2 Гб

Сообщение KonishchevDmitry »

Доброго времени суток.

Подскажите, пожалуйста, как выполнить stat(2) для файла, размер которого больше 2 Гб.
stat(2) записывает полученные данные в структуру

Код:

struct stat { dev_t st_dev; /* ID of device containing file */ ino_t st_ino; /* inode number */ mode_t st_mode; /* protection */ nlink_t st_nlink; /* number of hard links */ uid_t st_uid; /* user ID of owner */ gid_t st_gid; /* group ID of owner */ dev_t st_rdev; /* device ID (if special file) */ off_t st_size; /* total size, in bytes */ blksize_t st_blksize; /* blocksize for filesystem I/O */ blkcnt_t st_blocks; /* number of blocks allocated */ time_t st_atime; /* time of last access */ time_t st_mtime; /* time of last modification */ time_t st_ctime; /* time of last status change */ };
причем размер st_size - 4 байта. Т. е. никак не может хранить размер файла > 2 Гб.
При попытке выполнить stat для файла большого размера он возвращает -1 и код ошибки: "Value too large for defined data type".

Поиск через гугл практически ничего не дал. Наткнулся на рекомендации использовать stat64, но, честно говоря, это мне так и не удалось, т. к. для нее нужно использовать struct stat64 вместо struct stat, но компилятор говорит, что "storage size of ‘file_info’ isn’t known" (в программе file_info объявлена как struct stat64). По stat64 у меня даже нету мэна в системе. :unsure:

Буду благодарен за помощь.
Спасибо сказали:
spielmann
Сообщения: 105
ОС: Linux

Re: Решено: stat(2) для файлов > 2 Гб

Сообщение spielmann »

gcc -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64

Использовать struct stat
Спасибо сказали:
Аватара пользователя
KonishchevDmitry
Сообщения: 92
ОС: Ubuntu

Re: Решено: stat(2) для файлов > 2 Гб

Сообщение KonishchevDmitry »

Ок. Спасибо большое. Работает.
Спасибо сказали: