Используя 2 процесса в C, первый для CreateFileMapping в буфер, а второй для получения MapViewOfFile и изменения его
Помогите с домашним заданием, я просто понятия не имею, как это сделать ... Я не нашел ни одного примера этого ...
мой код C:
#include <stdio.h>
#include <Windows.h>
int main(void)
{
HANDLE hMapFile = CreateFileA("C:\\Users\\hed-b\\source\\repos\\Project2\\Project2\\gibrish", GENERIC_ALL, NULL, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
LPCTSTR pBuf;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, // use paging file
NULL, // default security
PAGE_READWRITE, // read/write access
0, // maximum object size (high-order DWORD)
NULL,
"myfile"); // name of mapping object
if (hMapFile == NULL)
{
_tprintf(TEXT("Could not create file mapping object (%d).\n"),
GetLastError());
return 1;
}
DWORD MyFileSize = GetFileSize(hMapFile, NULL);
pBuf = (LPTSTR)MapViewOfFile(hMapFile, // handle to map object
FILE_MAP_ALL_ACCESS, // read/write permission
0,
0,
MyFileSize);
if (pBuf == NULL)
{
/* _tprintf(TEXT("Could not map view of file (%d).\n"),
GetLastError());*/
CloseHandle(hMapFile);
return 1;
}
CopyMemory((PVOID)pBuf, "A", (1 * sizeof(TCHAR)));
_getch();
UnmapViewOfFile(pBuf);
CloseHandle(hMapFile);
return 0;
}
Я пытался сделать это с C #
первая программа:
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Threading;
class Program
{
static void Main(string[] args)
{
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile("C:\\Users\\hed-b\\source\\repos\\Project2\\Project2\\gibrish", FileMode.Open, "sharedBuffer"))
{
Console.WriteLine("Start Process B and press ENTER to continue.");
Console.ReadLine();
}
}
}
вторая программа:
using System;
using System.IO;
using System.IO.MemoryMappedFiles;
using System.Runtime.InteropServices;
using System.Threading;
class Program
{
// Process B:
static void Main(string[] args)
{
using (var mmf = MemoryMappedFile.OpenExisting("sharedBuffer"))
{
using (var accessor = mmf.CreateViewAccessor())
{
accessor.Write(1, 'A');
}
}
}
}
программа на C работает нормально ... Но я понятия не имею, как разделить ее на 2 процесса ..
Какова лучшая практика? можно передать HANDLE hMapFile в качестве параметра?
или я могу использовать что-то еще, кроме MapViewOfFile, которое использует имя карты, например: «myfile» вместо HANDLE, как я делал в этой программе на C #