2013-04-03 20 views
5

yönetmek Ben kaynağıyla domain özetleyecek.- İlk başta dosya boyutunu

namespace bip=boost::interprocess; 

typedef bip::allocator<int, bip::managed_mapped_file::segment_manager> allocator; 
typedef bip::vector<int, allocator> vector; 

bip::managed_mapped_file m_file(open_or_create, "./file", constant_value);  
bip::allocator alloc(m_file.get_segment_manager()); 
bip::vector *vec = m_file.find_or_construct<vector>("vector")(alloc); 

Temeldeki bir dosyanın son boyutunu umursamıyorum, ancak bu değeri tahmin edemiyorum. Altta yatan bir dosyayı yeniden boyutlandıracak herhangi bir yükseltme mekanizması var mı? Yoksa bip :: bad_alloc'u yakalamam ve bunu kendi başıma mı halledmeliyim?

cevap

6

Bu dokümanları, bu this section belgelerini okuyun.

Sen neye ihtiyacınız olabilir statik üye işlevi grow() vardır: büyüyen off-line dememizin

bip::managed_mapped_file::grow("./file", extra_bytes); 

Ama kimse dosyasını kullanarak emin olmak zorunda, bu. Ve bu probleme bağlı olarak mümkün olmayabilir.

+0

Ah. Çok basit. Doğrudan POSIX mmap'ında ve Boost IOstreams kullanarak benzer zorlukları çözdükten sonra kandırdım diye itiraf etmeliyim. Bakınız bu cevap [C++ ile bir satırı diğeriyle nasıl değiştirebilirim?] (Http://stackoverflow.com/a/17374711/85371). Taşınabilir olmak için nasıl uyguladıklarını merak ediyorum. – sehe

İlgili konular