Boost iostream: как превратить ifstream в файл с отображением памяти?

Я хочу просто открыть файл для чтения в виде файла с отображением памяти - чтобы получить к нему доступ с гораздо большей скоростью в будущем (пример: мы открываем файл, читаем его до конца, ждем и читаем снова и снова). Тем временем я хочу, чтобы этот файл быть модифицируемым другими программами, и когда они изменят его, я хочу, чтобы мой 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; 
} 

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


person Rella    schedule 22.08.2011    source источник
comment
Непонятно, что вы хотите сделать и что вы пробовали. Например, что вы имеете в виду, когда говорите, что я не могу редактировать и сохранять? Вы пытаетесь использовать редактор (какой?) и получаете ошибку (какую? и когда?). Пожалуйста, опишите точно: (1) ваши действия (2) результаты, которые вы получаете и (3) результаты, которые вы пытаетесь получить .   -  person n. 1.8e9-where's-my-share m.    schedule 22.08.2011


Ответы (1)


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

person Pedro Ferreira    schedule 22.08.2011