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()を使用します。
私の質問には2つの部分があります:
1)セットのサイズは可変であり、フォークされた各プロセスで、StoredMessageを追加し、StoredMessageのベクターにStoredMessageDataを追加できるようにする必要があることはすでにわかっています。しかし、mmapがこれを処理できるかどうかはわかりません...ベースオブジェクトに十分なスペースを割り当てるだけではありませんか?これらの追加を行えるように十分に割り当てることができますか?
2)mainからの上記のコードは、現在エラーをスローしています。
エラー:âvoid*âからâstd:: set、std ::allocator>*âへの無効な変換
誰かがこれが何を意味するのか/それを修正する方法を知っていますか?
前もって感謝します!