Linux:共享内存api使用

代码:

#include
#include
#include
#include
#include
#include
#include
#include

#include
#include

int main(void *arg)
{
int shmid = -1;

shmid = shmget(0x0002, 256, 0644 | IPC_CREAT | IPC_EXCL);//获取内存分配的进程id
if (-1 == shmid)
{
    perror("create shm failed ...");
    return(-1);
}

printf("create shm ok\n");

char *buf = NULL;
buf = (char *)shmat(shmid, NULL, SHM_RND); //共享内存同进程关联,并获取共享内存文件描述符buf.
if ((char *)-1 == buf)
{
    perror("shmat failed ...");
    return(-1);
}

memcpy(buf, "hello world", sizeof("hello world"));

printf("buf is: %s\n", buf);

getchar();  //暂停一下进程,回车键继续执行

shmdt(buf);//shimid共享内存同进程脱离

printf("finish  dt    \n");

getchar();//暂停一下进程,回车键继续执行

int ret = shmctl(shmid, IPC_RMID, NULL); //把shimid共享内存标志为即将删除,当操作过它的进程都退出时,系统会删除该共享内存
if ((void *)-1 == buf)
{
    perror("shmctl failed ...");
    return(-1);
}

return 0;

}

结果:

Linux:共享内存api使用_第1张图片
注意shmdt(), shmctl(),两个函数执行后nattch的变化
Linux:共享内存api使用_第2张图片

你可能感兴趣的:(linux,c++,运维)