Как экспортировать структуру в файл, а затем отобразить файл в памяти? - PullRequest
2 голосов
/ 04 мая 2011

У меня есть структура, которую я хотел бы экспортировать в файл, а затем mmap () этот файл.Одна проблема заключается в том, что структура имеет переменную-член, которая является строкой, и я не уверен, как mmap справится с этим.В этом случае все эти строки имеют одинаковый размер, 8 символов.Я работаю в Windows, хотя я использую функцию mmap () , которую я нашел в сети и которая должна дублировать функцию Linux mmap ().

Сама структура определяется как:

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

Можно ли определить возвращаемое значение sizeof () для объекта?

Возможно ли сопоставление файла, содержащего данные структуры?

Чтокакой код я должен использовать для экспорта структуры в файл, а затем отобразить ее?

Ответы [ 2 ]

6 голосов
/ 04 мая 2011

Представление std::string не гарантируется стандартом C ++, поэтому это не будет работать.std::string может (и обычно будет) размещать свое содержимое в любом месте кучи, поэтому вы будете хранить указатель и элемент размера, а не саму строку.

Массив char с compile-Размер постоянной времени, такой как tsetArr, должен работать, хотя.

Можно ли определить возвращаемое значение sizeof () для объекта?

Нет,sizeof не является функцией, поэтому вы не можете перегрузить ее (и строго, она имеет значение , но не возвращаемое значение , поскольку она не возвращает из любого места; он расширяется до константы компилятором).

Возможно ли отображение файла, содержащего struct данные?

Возможно, дано я советую против этого;ваш код не будет переносимым, возможно, даже не для разных компиляторов на одной платформе, а ваш struct сделан из камня.В любом случае, если вы хотите сделать это, только mmap POD (обычные старые данные) без элементов указателя и добавьте элемент unsigned version в ваш struct, который вы увеличиваете при каждом изменении его определения.

1 голос
/ 05 мая 2011
struct testStruct
{
    char testString[9];
    unsigned int testInt;
    unsigned int tsetArr[9];
};
...