如何将结构导出到文件,然后对文件进行内存映射



我有一个结构,我想导出到一个文件,然后mmap()该文件。一个问题是该结构有一个字符串的成员变量,我不确定 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 成员,每次更改其定义时都会递增该成员。

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

相关内容

最新更新