写入端:
#include
#include
#include
#include
#include
using namespace std;
struct MappingDataType {
int mappingData;
};
bool SetUsedPID(string mappingName)
{
void *shm = NULL;
MappingDataType *shared;
int shmid = shmget((key_t), sizeof(MappingDataType), |IPC_CREAT);
if(shmid == -)
{
fprintf(stderr, "shmget failed\n");
return false;
}
shm = shmat(shmid, , );
if(shm == (void*)-)
{
fprintf(stderr, "shmat failed\n");
return false;
}
shared = (MappingDataType*)shm;
shared->mappingData = ::getpid();
/*if(shmdt(shm) == -1)
{
fprintf(stderr, "shmdt failed\n");
return false;
}
if(shmctl(shmid, IPC_RMID, 0) == -1)
{
fprintf(stderr, "shmctl(IPC_RMID) failed\n");
return false;
}*/
return true;
}
int main(int argc, char *argv[])
{
bool result = SetUsedPID("abc");
//打断点,运行读取端
cout << result << endl;
return ;
}
读取端:
#include
#include
#include
#include
#include
using namespace std;
struct MappingDataType {
int mappingData;
};
int GetUsedPID(string mappingName)
{
void *shm = NULL;
MappingDataType *shared;
int shmid = shmget((key_t), sizeof(MappingDataType), | IPC_CREAT);
if (shmid == -)
{
fprintf(stderr, "shmget failed\n");
return ;
}
shm = shmat(shmid, , );
if (shm == (void*)-)
{
fprintf(stderr, "shmat failed\n");
return ;
}
shared = (struct MappingDataType*)shm;
int pid = shared->mappingData;
if (shmdt(shm) == -)
{
fprintf(stderr, "shmdt failed\n");
}
if (shmctl(shmid, IPC_RMID, ) == -)
{
fprintf(stderr, "shmctl(IPC_RMID) failed\n");
}
return pid;
}
int main(int argc, char *argv[])
{
int pid = GetUsedPID("abc");
cout << pid << endl; //<================= Put a breakpoint here
return ;
}
Windows进程间共享内存通信实例
Windows进程间共享内存通信实例 抄抄补补整出来 采用内存映射文件实现WIN32进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在WIN32进程中保 ...
【VS开发】内存映射文件进程间共享内存
内存映射文件进程间共享内存 内存映射文件的另一个功能是在进程间共享数据,它提供了不同进程共享内存的一个有效且简单的方法.后面的许多例子都要用到共享内存.共享内存主要是通过映射机制实现的.Windows ...
C# 进程间共享内存通信方式
从别处看到一篇文章做进程间通信很好使,唯一的问题是,需要注意using的用法,Using有个用法3, using 语句允许程序员指定使用资源的对象应当何时释放资源.using 语句中使用的对象必须实现 ...
Linux 进程间通讯详解一
进程间的通讯 两台主机间的进程通讯 --socket 一台主机间的进程通讯 --管道(匿名管道,有名管道) --System V进程间通信(IPC)包括System V消息队列,System V信号量 ...
【笔记】Linux进程间同步和进程绑定至特定cpu
#define _GNU_SOURCE #include #include #include
linux进程间的通信之 共享内存
一.共享内存介绍 共享内存是三个IPC(Inter-Process Communication)机制中的一个. 它允许两个不相关的进程访问同一个逻辑内存. 共享内存是在两个正在进行的进程之间传递数据的 ...
Android系统匿名共享内存Ashmem(Anonymous Shared Memory)在进程间共享的原理分析