LINUX.ORG.RU

[C] fwrite и файлы больше 4Gb

 


0

0

Позиция в файле имеет тип off_t 32 бита, следовательно размер файла не может превышать 2^32 = 4Gb.

Каким образом осуществляется работа с файлами размером больше 4Gb?

С использованием "широких" функций, работающих с 64-разрядными переменными. Можбыть, wfwrite (w -- wide, широкий), посмотри похожие имена, а то мне лень.

one_more_hokum ★★★
()
Ответ на: комментарий от Deleted

+ man lseek64 в качестве отправной точки.

Deleted
()
Ответ на: комментарий от kerosinkin

>off_t зависит от архитектуры и не имеет ограничений 32 бита.
Это типа можно проверить с помощью printf("%d",sizeof(off_t)); или как?

aunt
()
Ответ на: комментарий от aunt

В своей программе - да, а вообще это обычно макросом .configure на этапе компиляции определяется и хранится в config.h если компилятору явно не задан его размер параметрах.

kerosinkin
()

В Solaris можно было собирать с чем-то вроде -D_FILE_OFFSET_BITS=64, вызовы оставались прежними, менялась размерность off_t. Или вариант с -D_LARGEFILE64_SOURCE=1, тогда можно было использовать вызовы вида xxxxx64.

ef37 ★★
()
Ответ на: комментарий от borodun

> FILE * fopen64 (const char *filename, const char *opentype)

> off64_t ftello64 (FILE *stream)

Явно их использовать не надо. Надо дефайнить какой-нибудь макрос. Например, _GNU_SOURCE или _XOPEN_SOURCE 600 - по вкусу. И юзать fseeko и ftello.

const86 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.