Posted on 2013-01-06 13:08
鑫龍 閱讀(531)
評論(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。