posts - 200, comments - 8, trackbacks - 0, articles - 0

shmdt与shmctl的区别

Posted on 2013-01-06 13:08 鑫龙 阅读(496) 评论(0)  编辑 收藏 引用 所属分类: linux编程

先看看 shmctl() 

  原型: int shmctl ( int shmqid, int cmd, struct shmid_ds *buf );

  返回:成功为 0 ,   失败 为-1

 

这个特殊的调用和semctl()调用几乎相同,因此,这里不进行详细的讨论。有效命令的值是: 

IPC_STAT :检索一个共享段的shmid_ds结构,把它存到buf参数的地址中。 

IPC_SET :对一个共享段来说,从buf 参数中取值设置shmid_ds结构的ipc_perm域的值。 

IPC_RMID :把一个段标记为删除 


 IPC_RMID 命令实际上不从内核删除一个段,而是仅仅把这个段标记为删除,实际的删除发生在最后一个进程离开这个共享段时。

当一个进程不再需要共享内存段时,它将调用shmdt()系统调用卸载,即本进程不再使用这个段,但是,这并不是从内核真正地删除这个段,而是把相关shmid_ds结构的 shm_nattch域的值减1。真正把内核中的共享内存删除还得用shmctl。


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理