#include<sys/shm.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>
struct st_pid{
int pid; // 进程编号
char name[51]; // 进程名称
};
int main(int argc, char *argv[]){
//共享内存的标志
int shmid;
// 获取或者创建共享内存,键值为0x5005
if ((shmid = shmget(0x5005, sizeof(struct st_pid), IPC_CREAT | 0640)) == -1) {
printf("shmget(0x5005) failed\n");
return -1;
}
// 用于指向共享内存的结构体变量
struct st_pid *stpid=0;
// 把共享内存链接到当前进程的地址空间
if ((stpid = (struct st_pid*)shmat(shmid, 0, 0)) == (void*)-1)
{
printf("shmat failed\n");
return -1;
}
printf("pid:%d, name:%s\n", stpid->pid, stpid->name);
stpid->pid = getpid(); // 记录当前进程的编号
strcpy(stpid->name, argv[1]); // 记录当前进程的名称
printf("pid:%d, name:%s\n", stpid->pid, stpid->name);
// 把共享内存从当前进程中分离
shmdt(stpid); // 释放共享内存
if(shmctl(shmid, IPC_RMID, 0) == -1){
printf("shmctl(IPC_RMID) failed\n");
return -1;
}
return 0;
}
【C++】共享内存的生命管理周期
最新推荐文章于 2025-08-26 16:25:42 发布