一千萬個為什麽

搜索

如何將結構導出到文件,然後內存映射文件?

我有一個結構,我想導出到一個文件,然後mmap()該文件。一個問題是struct有一個成員變量是一個字符串,我不確定mmap將如何處理它。在這種情況下,所有這些字符串都具有相同的大小,8個字符。我在Windows上工作,雖然我正在使用 mmap( )我在網上發現了應該復制Linux mmap()函數的函數。

結構本身定義為:

struct testStruct
{
    string testString;
    unsigned int testInt;
    unsigned int tsetArr[9];
};

是否可以為對象定義sizeof()的返回值?

是否可以映射包含結構數據的文件?

我必須使用什麽代碼將結構導出到文件,然後mmap它?

最佳答案

C ++標準不保證 std :: string 的表示,因此這不起作用。 std :: string 可以(並且通常會)在堆上的任何位置分配其內容,因此您將存儲指針和大小成員,而不是字符串本身。

但是,具有編譯時常量大小的 char 數組(例如 tsetArr )應該可以正常工作。

是否可以為對象定義sizeof()的返回值?

不。 sizeof 不是一個函數,所以你不能重載它(嚴格來說,它有,但不是返回值因為它不會從任何地方返回;它被編譯器擴展為常量。

是否可以映射包含 struct 數據的文件?

可能,是的,但我建議不要這樣做;您的代碼將無法移植,甚至可能不會在同一平臺上的不同編譯器上運行,而您的 struct 也是一成不變的。如果你想這樣做,只有 mmap POD(普通舊數據)沒有指針成員,並在 struct 中加入 unsigned version 成員每次更改定義時都會遞增。

轉載註明原文: 如何將結構導出到文件,然後內存映射文件?