linux 进程间共享内存示例教程
写入端:
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>
using namespace std;
struct MappingDataType {
int mappingData;
};
bool SetUsedPID(string mappingName)
{
void *shm = NULL;
MappingDataType *shared;
int shmid = shmget((key_t)1234, sizeof(MappingDataType), 0666|IPC_CREAT);
if(shmid == -1)
{
fprintf(stderr, "shmget failed\n");
return false;
}
shm = shmat(shmid, 0, 0);
if(shm == (void*)-1)
{
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 0;
}
读取端:
#include <iostream>
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/shm.h>
using namespace std;
struct MappingDataType {
int mappingData;
};
int GetUsedPID(string mappingName)
{
void *shm = NULL;
MappingDataType *shared;
int shmid = shmget((key_t)1234, sizeof(MappingDataType), 0666 | IPC_CREAT);
if (shmid == -1)
{
fprintf(stderr, "shmget failed\n");
return 0;
}
shm = shmat(shmid, 0, 0);
if (shm == (void*)-1)
{
fprintf(stderr, "shmat failed\n");
return 0;
}
shared = (struct MappingDataType*)shm;
int pid = shared->mappingData;
if (shmdt(shm) == -1)
{
fprintf(stderr, "shmdt failed\n");
}
if (shmctl(shmid, IPC_RMID, 0) == -1)
{
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 0;
}
当前页面是本站的「Baidu MIP」版。发表评论请点击:完整版 »