wordpress 无数据库版,sem优化方法,金华做网站建设公司,全国火车站等级最新排名共享内存段被多个进程附加的时候#xff0c;如果不是所有进程都已经调用shmdt#xff0c;那么删除该共享内存段时#xff0c;会出现一个临时的不完整的共享内存段#xff08;key值是0#xff09;#xff0c;无法彻底删除。只有当所有进程都调用shmdt#xff0c;这个临时… 共享内存段被多个进程附加的时候如果不是所有进程都已经调用shmdt那么删除该共享内存段时会出现一个临时的不完整的共享内存段key值是0无法彻底删除。只有当所有进程都调用shmdt这个临时的不完整共享内存段才会消失。 //共享内存
#include stdio.h
#include stdlib.h
#include string.h
#include errno.h
#include sys/ipc.h
#include sys/shm.htypedef struct _student
{char name[64];int index;
}Student;int main()
{//创建内存中的共享内存区,大小是sizeof(Student)权限是0666int shmid shmget(0x2234,sizeof(Student),0666|IPC_CREAT|IPC_EXCL);if(shmid-1){if(errnoEEXIST){//该key值的共享内存已经存在shmidshmget(0x2234,sizeof(Student),0666);}else{perror(shmget() err);return -1;}}//创建进程内的映射共享内存区void *bufNULL;//shmat()第二个参数为NULL表示由系统创建进程内的共享内存第三个参数表示的是读写权限//返回值buf是系统在本进程内分配的内存块的首地址bufshmat(shmid,NULL,0);//向本进程的共享内存写入数据strcpy(buf,11112);printf(请输入操作\n);char chgetchar();if(ch1){//将本进程中映射共享内存的内存块释放本进程取消附加共享内存shmdt(buf);//删除共享内存段shmctl(shmid,IPC_RMID,NULL);}return 0;
} 转载于:https://www.cnblogs.com/zhanggaofeng/p/6224091.html