我有一個C++程序,我在其中使用fork(),但我需要能夠共享一個對象,可以讀取和寫入到父進程及其子進程之間。從我的在線閱讀來看,似乎mmap是這樣做的方式。以下是我有:一套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)主營上面的代碼,目前拋出一個錯誤:
錯誤:從避免無效的轉換* A到ASTD ::集,性病::分配器> * A
有誰知道這意味着/如何解決它?
預先感謝您!
我不想成爲灰心或任何事情,但如果你不能自己回答這些問題,你可能不應該這樣做。實際上,不,這不起作用。 –
我很抱歉,如果他們其實很簡單的問題;我通常不用C++編程。但是,爲了學習,提供有用的答案而不是貶低的答案可能對未來更有幫助。 –
我在說的是,你甚至沒有意識到這種方法的實際問題。你顯然沒有掌握C++基礎知識。而且答案是「這不起作用」。 –