key: IPC_PRIVATE, ftok
创建或打开共享内存:shmget
把共享内存映射到用户空间: shmat
解除映射: shmdt
销毁共享内存:shmctl
#include
#include
#include
#include
#include
#include
#include
int main(int argc, char *argv[])
{
//1、创建共享内存
key_t key = ftok(".", 'a');
if (key < 0)
{
perror("ftok");
return -1;
}
system("ipcs");
// int shmid = shmget(IPC_PRIVATE, 1024, IPC_CREAT|0777);
int shmid = shmget(key, 1024, IPC_CREAT|0777);
if (shmid < 0)
{
perror("shmget");
return -1;
}
system("ipcs");
//2. 把共享内存映射到用户空间
char *addr = shmat(shmid, NULL, 0);
if ((void *)-1 == addr)
{
perror("shmat");
return -1;
}
pid_t pid;
if (0 > (pid = fork()))
{
perror("fork");
return -1;
}
else if (0 == pid)
{
sleep(1);
strcpy(addr, "hello world");
exit(0);
}
printf("addr: %s\n", addr);
sleep(2);
printf("addr: %s\n", addr);
//3. 解除映射
if (0 > shmdt(addr))
{
perror("shmdt");
return -1;
}
//4. 销毁共享内存
if (0 > shmctl(shmid, IPC_RMID, NULL))
{
perror("shmctl");
return -1;
}
return 0;
}