Повышение iostream: как превратить ifstream в файл с отображенной памятью? - PullRequest
4 голосов
/ 22 августа 2011

То, что я хочу, - это просто открыть файл для чтения в виде файла с отображенной памятью - чтобы получить к нему гораздо более быстрый доступ в будущем (пример: мы открываем файл, читаем его до конца, ждем и читаем снова и снова)Я хочу, чтобы этот файл мог быть изменен другими программами, и когда он будет изменен, я хочу, чтобы мой ifstream тоже изменил.Как это сделать с boost iostreams (или boost interprocess)?Можем ли мы просто высветить - эй, этот файл должен быть отображен в памяти для всех приложений?

Итак, я пробую такой код:

#include <iostream> 
#include <boost/iostreams/device/mapped_file.hpp> 
#include <boost/iostreams/stream.hpp> 

using namespace boost::iostreams; 

int main(int argc, char **argv) 
{
    stream <mapped_file_sink> out; 
    try 
    { 

        mapped_file_params p("one.txt"); 
        p.new_file_size = 1024 * sizeof (char); 
        out.open(mapped_file_sink(p),  std::ios_base::out | std::ios_base::binary); 
    } 
    catch (const std::exception &e) 
    { 
        std::cout << e.what() << std::endl; 
        return 2; 
    } 
    std::cin.get();
    return 0; 
} 

, чтобы он открывал или создавал файл, помещал его в оперативную память.Но я не могу получить к нему доступ (я не могу редактировать и сохранить, но я могу открыть) из любой другой программы = (Как сделать файл редактируемым из других программ?

1 Ответ

2 голосов
/ 22 августа 2011

Полагаю, вы ищете скорость доступа к файлам, но зачем изобретать велосипед?Используйте раздел с отображением памяти и создайте в нем свои файлы.Тогда вам просто нужно время от времени синхронизировать их в раздел диска, чтобы не потерять информацию в случае сбоя питания ... вы всегда можете инвестировать в ИБП ...; -)

...