drucken Ich versuche, Boost Shared Memory-Bibliothek zu verwenden, um einige Interprozesskommunikation (VS 2015) zu tun. Ich fand eine example online, die sehr hilfreich ist. Aus Gründen der Vernunft möchte ich nur eine einfache Überprüfung durchführen, dass der Wert, den ich in die Adresse des gemeinsamen Speichers geschrieben habe, das ist, was ich wollte. Um dies zu tun, möchte ich den Wert des gemeinsamen Speichers mit Cout drucken. Dies ist der Code Ich habe zur Zeit:Shared Memory-Adresse Wert in die Befehlszeile
#include <boost\interprocess\shared_memory_object.hpp>
#include <boost\interprocess\mapped_region.hpp>
#include <iostream>
#include <stdio.h>
#include <conio.h>
#include <cstring>
#include <cstdlib>
#include <string>
int main()
{
using namespace boost::interprocess;
struct shm_remove
{
shm_remove() { shared_memory_object::remove("MySharedMemory"); }
~shm_remove() { shared_memory_object::remove("MySharedMemory"); }
} remover;
//Create a shared memory object
shared_memory_object shm(create_only, "MySharedMemory", read_write);
//Set size to 1
shm.truncate(1);
//Map the whole shared memory in this process
mapped_region region(shm, read_write);
//Write all the memory to 1
std::memset(region.get_address(), 1, region.get_size());
//Check that memory was initialized to 1
char *mem = static_cast<char*>(region.get_address());
for (std::size_t i = 0; i < region.get_size(); ++i)
{
std::cout << "Memory value: " << *mem << "\n";
if (*mem++ != 1)
{
return 1; //Error checking memory
}
}
std::cout << "press any key to quit";
_getch();
}
Der Code funktioniert gut, werden keine Fehler ausgelöst, wenn es überprüft, ob der zugeordnete Speicher ist auf 1 jedoch eingestellt worden ist, wenn ich versuche zu drucken, was ich denke, der Wert sein sollte an der Adresse, ich ein smiley-Gesicht bekommen ...
Kann mir jemand in die richtige Richtung? Ich habe einige Verdächtigungen (keine Kündigung \ 0?), Aber ich verstehe wirklich nicht die inneren Abläufe hier. Jede Hilfe wird geschätzt!
Versuchen Sie 'std :: cout <<" Speicherwert: "<< (int) * mem <<" \ n ";' –
perfekt danke! – willpower2727