我有一个使用 fork() 的 C++ 程序,但我需要能够在父进程及其子进程之间共享一个可以读写的对象。从我的在线阅读来看,似乎 mmap 是这样做的方法。这是我所拥有的:
enum messageType {New = 0, Old = 1, No_Message = 2};
typedef struct {
enum messageType type;
unsigned int senderID;
char message[100];
} StoredMessageData;
struct StoredMessage {
unsigned int recipientID;
vector<StoredMessageData> messages;
StoredMessage(const unsigned int& intRecipient = 0, const vector<StoredMessageData>& data = vector<StoredMessageData>())
: recipientID(intRecipient), messages(data)
{
messages.reserve(10);
}
bool operator<(const StoredMessage& compareTo) const
{
return recipientID < compareTo.recipientID;
}
bool operator==(const StoredMessage& compareTo) const
{
return recipientID == compareTo.recipientID;
}
};
然后主要:
set<StoredMessage> * msgs;
msgs = mmap(NULL, sizeof(set<StoredMessage>), PROT_READ | PROT_WRITE, MAP_SHARED | MAP_ANON, -1, 0);
后来我主要使用fork()。
我的问题有两部分:
1) 一个集合的大小是可变的,我已经知道在每个分叉的进程中,我希望能够添加一个 StoredMessage 并将一个 StoredMessageData 添加到 StoredMessage 中的向量。但是,我不确定 mmap 可以处理这个......它不只是为基础对象分配足够的空间吗?我可以让它分配足够的空间让我进行这些添加吗?
2)来自 main 的上述代码当前正在引发错误:
错误:从 âvoid*â 到 âstd::set、std::allocator >*â 的无效转换
有谁知道这意味着什么/如何解决它?
先感谢您!