qfedu-linux-advanced-level/day5/shm4.c

42 lines
803 B
C
Raw Permalink Normal View History

2023-08-18 16:47:04 +08:00
// 共享内存
#include <sys/shm.h>
#include <stdio.h>
#include <sys/types.h>
#include <string.h>
// 解除映射
int main()
{
key_t key = ftok("/", 28);
// 获取共享内存的标识
int shmid = shmget(key, 32, IPC_CREAT | 0666);
if (shmid == -1)
{
perror("shmget");
return 1;
}
printf("shmid=%d\n", shmid);
// 获取共享内存的首地址
char *buf = shmat(shmid, NULL, 0); // NULL表示让系统自动分配共享内存的首地址
if (buf == (char *)-1)
{
perror("shmat");
return 1;
}
printf("共享内存的数据:%s\n", buf);
// 解除映射
int ret = shmdt(buf);
if (ret == -1)
{
perror("shmdt");
return 1;
}
printf("解除映射成功 ok\n");
return 0;
}