在C中使用2个进程,第一个进程用于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#程序中所做的那样