Ошибка отображения файла памяти в Solaris с помощью ENOMEM

В Solaris 10, а также в Linux я использую вызов mmap для создания файла отображения памяти и последующего чтения файла из отдельного процесса. Для большого файла с отображенной памятью во время чтения (без записи) я получаю ENOMEM. В чем может быть причина, а что может быть решением проблемы или путем? Я думал, что отображенный в память файл не занимает память полностью.

Я использую следующий вызов:

char * segptr = (char *) mmap(0,sz,PROT_READ | PROT_WRITE,MAP_SHARED,fd,0);

где,sz это размер файла и fd дескриптор файла, открытого через open

Я получаю сбой ENOMEM при попытке зарезервировать место для целиком.

ulimit -a показывает:

core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
file size               (blocks, -f) unlimited
open files                      (-n) 256
pipe size            (512 bytes, -p) 10
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 29995
virtual memory          (kbytes, -v) unlimited

Могу ли я отобразить частичный файл? Если я открою частичный файл, смогу ли я получить доступ ко всему содержимому по требованию? Я не пользовалась setrlimit чтобы установить какой-либо предел, так что я думаю, используя значение по умолчанию (не знаю, что по умолчанию), я должен увеличить это? Пожалуйста, руководство.
Как мне отобразить файл небольшими порциями, чтобы сэкономить использование памяти и, таким образом, избежать ENOMEM?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]