Множественные переменные в одной разделяемой памяти при сопоставлении windows файлов - PullRequest
0 голосов
/ 06 августа 2020

В этом топе c Две переменные в одной разделяемой памяти , вы можете увидеть, как поместить 2 переменных в одну разделяемую память в C.

Однако я хочу поместите несколько переменных в одну общую память с помощью функции MapViewOfFile. Но я не нашел ни одного примера или решения. Типы переменных различаются, поэтому я не могу использовать std :: vector или array.

Как мне установить для этого аргументы CreateFileMapping и MapViewOfFile? Как я могу получить и установить адрес в FileMapping, который я хочу прочитать и записать в переменную?

Мне не обязательно создавать FileMapping для каждой переменной, верно?

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Используйте структуру, как указал Дэйвтерок. Вы должны указать общий размер всех членов для CreateFileMapping и MapViewOfFile. Затем вы можете привести возвращаемый указатель void MapViewOfFile к типу указателя структуры.

Например, если у вас есть структура типа

typedef struct combinedStruct {
    int intVariable;
    float floatVariable;
}CombinedStruct; 

, вам нужно создать указатель типа CombinedStruct и приведите возврат MapViewOfFile.

CombinedStruct * structPtr = (CombinedStruct*)(MapViewOfFile(...));

Затем вы можете получить доступ к отдельным переменным, таким как structPtr->intVariable и structPtr->floatVariable

0 голосов
/ 06 августа 2020

Самый простой способ разместить две переменные в одном и том же фрагменте памяти - это использовать Struct: typedef struct vs struct . Если вы хотите использовать shmget, вы просто должны отрегулировать размер выделенной памяти

shmid = shmget (shmkey, sizeof(var1) + sizeof(var2), 0644 | IPC_CREAT);

Затем, при необходимости, отрегулируйте указатели.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...