- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我试图将一个整数 a =3 从服务器端传递到客户端。问题是,当我在客户端执行消息 printf 时,显示的值不是 3,而是一个随机数(某些值)就像 19923)。我试图在服务器端通过值(&a)传递 a,但显示的值是心形。请看看该通信有什么问题。提前致谢。
//Server
#include <windows.h>
#define BUF_SIZE 256
LPSTR szMapName = "MyFileMappingObject";
int main(void)
{
int a = 3;
HANDLE hMapFile;
LPVOID lpMapAddress;
BOOL bRet;
hMapFile = CreateFileMapping(
INVALID_HANDLE_VALUE, /* use swap, not a particular file */
NULL, /* default security */
PAGE_READWRITE, /* read/write access */
0, /* maximum object size (high-order DWORD) */
1024, /* maximum object size (low-order DWORD) */
szMapName); /* name of mapping object */
if (hMapFile == INVALID_HANDLE_VALUE){
printf("CreateFileMapping error %lu",GetLastError());
}
lpMapAddress = MapViewOfFile(
hMapFile, /* handle to map object */
FILE_MAP_ALL_ACCESS, /* read/write permission */
0, /* offset (high-order) */
0, /* offset (low-order) */
0);
if (lpMapAddress == NULL)
printf("MapViewOfFile error");
//ZeroMemory(lpMapAddress, strlen(szMsg) + 1);
CopyMemory(lpMapAddress, a, sizeof(a));
Sleep(10000);
bRet = UnmapViewOfFile(lpMapAddress);
if (bRet == FALSE)
printf("UnampViewOfFile error");
bRet = CloseHandle(hMapFile);
if (bRet == FALSE)
printf("CloseHandle error");
return 0;
}
//Client
#include <windows.h>
#include <stdio.h>
#define BUF_SIZE 256
LPSTR szMapName = "MyFileMappingObject";
int main(void)
{
HANDLE hMapFile;
LPVOID lpMapAddress;
BOOL bRet;
hMapFile = OpenFileMapping(
FILE_MAP_ALL_ACCESS, /* read/write access */
FALSE, /* do not inherit the name */
szMapName); /* name of mapping object */
if (hMapFile == INVALID_HANDLE_VALUE){
printf("CreateFileMapping error %lu",GetLastError());
return 1;
}
lpMapAddress = MapViewOfFile(
hMapFile, /* handle to map object */
FILE_MAP_ALL_ACCESS, /* read/write permission */
0, /* offset (high-order) */
0, /* offset (low-order) */
0);
if (lpMapAddress == NULL){
printf("MapViewOfFile error %d",GetLastError());
return 1;
}
printf("Message from server is: %d\n", lpMapAddress);
bRet = UnmapViewOfFile(lpMapAddress);
if (bRet == FALSE){
printf("UnampViewOfFile");
return 1;
}
bRet = CloseHandle(hMapFile);
if (bRet == FALSE){
printf("CloseHandle");
return 1;
}
return 0;
}
最佳答案
这是不正确的:
printf("Message from server is: %d\n", lpMapAddress);
因为 lpMapAddress
的类型为 LPVOID
(a void*
),因此这将打印 lpMapAddress
的内存地址code> 点,不是整数值。 (请注意,必须使用 %p
来打印指针值)。
基于将 int
写入共享内存的技术:
CopyMemory(lpMapAddress, a, sizeof(a));
提取int
将是相反的:
int read_a;
CopyMemory(&read_a, lpMapAddress, sizeof(read_a));
printf("Message from server is: %d\n", read_a);
请注意,以下行中缺少格式说明符:
printf("CreateFileMapping error",GetLastError());
应该是:
printf("CreateFileMapping error: %lu", GetLastError());
关于c - MapViewOfFile 向子进程发送整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13513908/
如果我在同一进程中为同一文件创建 2 个单独的映射,指针是否会共享? 换句话说: LPCTSTR filename = //... HANDLE file1 = CreateFile(filename
如果我在同一进程中为同一文件创建 2 个单独的映射,指针是否会共享? 换句话说: LPCTSTR filename = //... HANDLE file1 = CreateFile(filename
所以我试图将一个整数 a =3 从服务器端传递到客户端。问题是,当我在客户端执行消息 printf 时,显示的值不是 3,而是一个随机数(某些值)就像 19923)。我试图在服务器端通过值(&a)传递
我正在尝试使用 VS2010 在 Windows 上对文件进行内存映射。我在 DLL 中执行此操作。DLL 的第一个实例可以很好地映射文件。同一进程中的第二个实例导致 *ppvData = ::Map
我正在尝试通过共享内存为学校作业实现 IPC。我创建了一个名为 SharedMemoryBuffer 的类来处理创建文件映射和 View 。 我的 Init() 函数如下所示: BYTE * Shar
使用 win32api,我希望下面的程序创建两个进程并创建一个文件映射。 (使用 C++) 我不知道我应该在 Handle CreateFileMapping(....我试过: PROCCESS_IN
早上好,MapViewOfFile 有可能返回同一个地址两次吗?但是,UnmapViewOfFile 在必须取消映射同一地址两次时会出现错误。我们收到错误 487:地址无效。下面是一些伪代码,展示了我
我有一些使用 MapViewOfFile 共享数据的程序,但我遇到了奇怪的访问冲突,这似乎是由于访问映射文件数据造成的。 一些共享数据有指针,但是这些指针只被一个进程设置和使用,而是由进程内的多个线程
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Why won't the loader load at the desired location “Map
我基本上试图将我的结构转换或复制到我的其他进程部分 View ,但我不断收到错误 C2760: syntax error: unexpected token 'identifier', expecte
我想将 MapViewOfFile 的返回值(据我所知是指向 void 的指针)“强制转换”到我自己的类,以便我能够使用该对象。我知道内存的结构。 headerSize 位于字节号 4 到字节号 8,
如何使用 CreateFileMapping 和 MapViewOfFile 将共享内存分配给静态缓冲区,如下所示。 #pragma data_seg(".ABC") __declspec (dlle
我正在尝试使用需要 DWORD 的函数。 这些是规范: dwFileOffsetHigh [in] A high-order DWORD of the file offset where the vi
您好 StackOverflow 的用户。 我一直在使用 C++ 中 Win32 API 的 MapViewOfFile,我是它的新手,但我一直在尝试为 mapview 文件创建一个信号量,所以一个实
下午好,众所周知,在处理大文件时无法映射到 Win32 中的一个 View ,创建仔细映射的代码并根据需要取消映射文件区域。 pastebin 网址是: 我创建并测试了一个处理大文件的 cMemory
``我正在努力做我的家庭作业,但我无法继续,需要你的帮助。我有两个使用相同文件 (log.txt) 的进程。当我尝试同时写一些东西时,它会覆盖并且只有一个进程写入 txt。 这是我的创作过程, ent
开发游戏(PT 中的“jogo”), 服务器最多可以同时运行 5 个游戏, 客户端将通过映射内存访问。 这就是我所拥有的: 服务器: #define MAX_JOGOS 5 typedef struc
以下代码是否会将文件中的数据加载到系统内存中,以便访问结果指针永远不会阻塞线程? auto ptr = VirtualLock(MapViewOfFile(file_map, FILE_MAP_REA
我有一个非常大的文件,我需要分成小块读取它,然后处理每一 block 。我正在使用 MapViewOfFile 函数在内存中映射一 block ,但在阅读第一部分后我无法阅读第二部分。当我尝试映射它时
只是想知道我是否正在像这样在 Windows 平台上创建共享内存阵列: HANDLE hFile = CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAG
我是一名优秀的程序员,十分优秀!