Q: mmap() ?

А я вот извиняюсь, а Windows умеет mmap()-ать файлы с сетевого диска?

А макос?

Ну то есть у меня какое-то ощущение из прошлого, что нет, нельзя, но в доках такого ограничения не нашел.

Comments

Windows умеет. И compressed/encrypted тоже.

EDIT: хотя насчет шифрованного файла с сетевого диска не уверен, не знаю кто в этом случае будет расшифровывать, сервер или клиент

В-общем, я подумал - и оставил старый код fallback-ом на случай если вдруг не помэпалось.

Мало ли, NFS какой попадется или еще какая FS которая потребного для map() не делает.

Умеет, но для них не гарантируется когерентность.

Ну на когерентность мне плевать, мне RAW-файл прочесть в память не делая malloc(file.size())

Кроме когерентнлсти есть еще грабли с разрывом сетевого соединения, при котором получается AV вместо нормальных файловых/сетевых ошибок. Если нужно прочесть и забыть, то пользоваться можно, если надо долго держать mapping, то не стоит.

Прочесть и забыть.

AV - это что?

P.S. Недавно перебирал фотки с Жомболока и мне кажется, что твой юзерпик именно отттуда :)

AV - access violation. GP fault, segmentation falt, etc - синонимы. В терминах виндовских ошибок это будет IN_PAGE_ERROR, как будто OS пытается читать страницу из page-файла, а ей не дают. Ловить о обрабатывать такие ошибки довольно утомительно. Поэтому я бы трижды подумал, прежде чем использовать file mapping вместо последовательного чтения файла кусками.

Юзерпик оттуда, это прямо твоя фотка. Могу поставить (c) :)

Ну и писал бы GPF :)

В-общем, счастья не оказалось. Идея была - уйти от malloc(file.size()) и чтения туда (и, соответственно, фрагментации памяти), а прямо ковыряться в mmap, но выяснилось что (используемый т.е. чужой) парсер tiff-тегов так не умеет, а что-то в эту память пишет.

А счастье было так близко.

(C) ставить не надо, просто смотрю - знакомое что-то.....

P.S. нет желания скататься на Хамар-Дабан летом? Что-нибудь несложное, вроде Хангарула, чисто отдохнуть, рыбы половить и все такое.

Add new comment