File Mapping. Можно ли использовать WriteFile и ReadFile

149
18 сентября 2019, 02:00

Есть код

void LetMeMapFlie(){
    // Создаем файлы
    FMP.writefile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 255, MFName_w);
    FMP.readfile  = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READONLY,  0, 255, MFName_r);
    // Открываем файлы
    FMP.write = MapViewOfFile(FMP.writefile, FILE_MAP_WRITE, 0,0,0);
    FMP.read  = MapViewOfFile(FMP.readfile,  FILE_MAP_READ, 0,0,0);
}

Далее есть функции, оставшиеся у меня от работы с трубами

void WriteChar_SlimRG(unsigned char key){
    WriteFile(pipe1Write, &key, sizeof(unsigned char), &out_pipe_b, NULL)
}

Могу ли я тупо заменить pipe1Write на хэндл файла

Или есть какой-то особый подход записи байтов или INTов в Map File?

P.S. В англ. яз. не оч. шарю (Google Translate) - поэтому не следует думать, что я не посещал офф. сайт майкрософта. Но понять этот момент - не понял.

Answer 1

MapViewOfFile возвращает адрес участка памяти, на который отображен файл или его часть. Для того, чтобы работать с адресами, а не использовать файловые операции.

Полученный указатель можно привести к нужному типу - например, char* и обращаться, как к массиву.

char* data = (char*)MapViewOfFile(...
data[3] = 42;

ReadFile и WriteFile тут совсем ни при чём

READ ALSO
Насколько сейчас актуально WinAPI? [закрыт]

Насколько сейчас актуально WinAPI? [закрыт]

Изучаю разработку программ на C++ по книгамТам для создания окон и многого другого используется библиотека WinAPI

132
Присоеденение boost к CMake

Присоеденение boost к CMake

FIND_PACKAGE(Boost) - ищет boost по стандартному пути /usr/local/, мой boost лежит по пути /home/cheshirecat/libs Как сделать так, чтобы FIND_PACKAGE(Boost) нашел boost?

119
Разные результаты base64

Разные результаты base64

Всех приветствуюПытаюсь на python расшифровать сообщения C++'a

109