Hi! On Wed, Jul 14, 2004 at 00:11 +0300, Paul Arakelyan wrote:
А чего я нигде не встречал, что в http размер файла для нормальной работы с ним - 2GB? (ну, fseek() limitations - эт понятно, но в HTTP длина же в текстовом виде передаётся...). Или это бага апача?
Это неправильно скомпиленный апач. Вообще гофоря, не факт - ибо поведение того же wget при получении "большого числа" - не предсказуемо. И так при таскании такого оно писать отрицательный размер и скорость начинает ;). Думаю, с кучей другого софта были бы те же проблемы, и послать "unspecified length" вместо числа - лучшее решение.
И что это за страшные лимиты в 2GB file size на ext3fs? Как люди с этим живут? (пример экстримов - лог дорастает до 2GB и сквид клеи ласты, а как в xDonkey "достать" файло на 3GB линуксоидам - ваще непонятно :) ).
Давно уже нет никаких лимитов, это инфа времен ядра версии 2.0 (хотя я уже не понмю, давно это было). kernel-2.4.21 кажись.
Начиная с 2.2 это значения не имеет, а может и раньше -- уже не помню.
Проблема в том, что в отличие от Фри в Линуховой libc есть два варианта вызовов -- один для работы с файлами до 2-х гиг (32-х битный) а второй -- 64-х битный. И вот если при компиляции сказать указать пару дефайнов, то все будет нормально, а если нет -- лимит в 2ГБ. То ли "об этом никто не знает", то ли просто не заморачивались.
Об этом знают все, кто этим занимается ;-)
Но всё-таки, чего ж логгинг валился нафиг (работающий прочесс по достижении 2Гб падал) - не ясно. Точно так же, думаю, что fopen() для логов делается обычно в append mode - то есть, тоже нигде не светится seek position, ну или fseek() "в конец файла" - тоже ничего "такого" не возвращает.
Просто вместо fopen нужно делать fopen64, вместо fseek -- fseek64 и т.д. Если проги скомпилить без нужных дефайнов (их там два), то эти вызовы использоваться не будут -- тот же struct FILE явно не заточен под 64-битные указатели, а обычный fseek позовет обычный lseek, а не lseek64.
И главное - насколько я понял в своё время - даже с ограничением 2GB fseek() вполне позволял fseek() куда угодно - ибо оно умело relative position - значит, нужно просто как-то "своими силами" отслеживать seek position и при необходимости делать кучу relative fseek().
Отслеживать seek position это конечно хорошо, но зачем, если можно перекомпилить прогу с двумя дополнительными дефайнами и все будет работать? -- Victor Cheburkin VCW61, VC319-RIPE, VC1-UANIC =================================================================== uanog mailing list. To Unsubscribe: send mail to majordomo@uanog.kiev.ua with "unsubscribe uanog" in the body of the message