Предположим, я хочу прочитать весь файл в памяти. Я бы открыл его в двоичном режиме, использовал бы fseek
, чтобы добраться до конца файла, затем сделал бы ftell
, чтобы получить его размер.
Тогда я бы выделил строку с тем же размером, что и файл, и просто прочитал ее, верно?
Проблема в том, что ftell
возвращает long int
, а malloc
должен получить аргумент size_t
. Теперь, насколько я могу судить, size_t
может быть больше, чем long int
(я только что проверил C: справочное руководство от Harbison и Steele, и в главе 11 упоминается что size_t
может быть определено как unsigned long long
, в зависимости от компилятора). Я полагаю, что обратное может быть правдой (и это было бы реальной проблемой, поскольку я бы бросил long long
в long
, или что-то в этом роде)
Итак, мой вопрос: как мне с этим справиться?
Спасибо!
edit: спасибо, ребята, это было очень быстро! Я буду использовать mmap
(и posix_madvise
тоже, что я нашел после информации о mmap
)!