Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Загрузить большой файл в память


Автор: yorc 27.12.2009, 01:02
привет всем!

сразу извиняюсь - уже создал похожую тему в разделе Perl, но потом понял, что проблема моя более общая
задача моя состоит в том, чтобы загрузить большой (>100 Мб) текстовый файл в память, а потом просто пользоваться им из Perl-кода
работаю под FreeBSD 6.3

подскажите, пожалуйста, как можно это организовать, чтобы не загружать его при каждом вызове интерпретатора?

ещё раз просьба к модерамне удаляйте! похожая тема есть, но там несколько другой контекст

спасибо!

Автор: andrew_121 27.12.2009, 04:34
Тут была похожая проблема. Решили. Но как этот код привязать к перл, хз.
http://forum.vingrad.ru/index.php?showtopic=268273&view=findpost&p=1935034

Автор: MAKCim 27.12.2009, 11:39
в режиме read-only можно его скопировать в экземпляр ramfs и юзать оттуда
Код

# mount ramfs <куда монтируем> -t ramfs

Автор: yorc 8.1.2010, 13:59
MAKCim: спасибо за блестящую идею!
у меня фрибсд, поэтому попытался использовать не RamFS, а MDCONFIG.
однако у меня VDS, и хостеры чёрным по белому написали, что пользование командой mount запрещено... :(

есть ещё мысли насчёт memcached, но она ведь совсем для других целей создавалась!
мне нужно 1 раз в день, допустим, потратить 2-3 минуты на загрузку файла в оперативку, а потом просто получать к нему доступ из Perl-интерпретатора, не тратя время на ожидание!
есть ещё хоть какие-нибудь идеи, как это можно сделать?

Автор: MAKCim 8.1.2010, 15:01
можно через mmap + MAP_POPULATE + MAP_LOCKED
если FreeBSD не поддерживает эти флаги, можно заюзать mmap + ручной read-ahead + mlock
mlock соответствует POSIX.1-2001, так что должен быть во FreeBSD

Автор: yorc 13.1.2010, 13:27
решил проблему установкой Redis-сервера

всем спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)