參考:
先看看 shmctl()
原型:intshmctl ( int shmqid, int cmd, struct shmid_ds *buf );
返回:成功為0,失敗 為-1
這個特殊的呼叫和semctl()呼叫幾乎相同,因此,這裡不進行詳細的討論。有效命令的值是:
ipc_set:對乙個共享段來說,從buf引數中取值設定shmid_ds結構的ipc_perm域的值。
ipc_rmid:把乙個段標記為刪除
ipc_rmid命令實際上不從核心刪除乙個段,而是僅僅把這個段標記為刪除,實際的刪除發生在最後乙個程序離開這個共享段時。
當乙個程序不再需要共享記憶體段時,它將呼叫shmdt()系統呼叫取消這個段,但是,這並不是從核心真正地刪除這個段,而是把相關shmid_ds結構的shm_nattch域的值減1,當這個值為0時,核心才從物理上刪除這個共享段。
所以,如果我們能保證共享記憶體的每個程序最後都能呼叫到shmdt(),那麼我們就沒有必要再去呼叫shmctl(ipc_rmid)去刪除這個記憶體段了。
共享記憶體 shmdt函式和shmctl函式
斷開共享記憶體連線 int shmdt const void shmaddr such as if shmdt shmaddr 1 引數 shmaddr shmat函式的返回值 共享記憶體管理 int shmctl int shmid,int cmd,struct shmid ds buf such...
zz shmdt與shmctl的區別
先看看 shmctl 原型 int shmctl int shmqid,int cmd,struct shmid ds buf 返回 成功為 0 失敗 為 1 這個特殊的呼叫和semctl 呼叫幾乎相同,因此,這裡不進行詳細的討論。有效命令的值是 ipc set 對乙個共享段來說,從buf 引數中取...
與 的區別? 與 的區別?
相同點 和 都是表示與的邏輯運算子,其運算結果一致 不同點 邏輯與 當兩邊的表示式都為true的時候,整個運算結果才為true,否則為false。短路與 當第乙個表示式的值為false的時候,則不再計算第二個表示式 注意 還可以做位運算子,當表示式不是boolean型別的時候 例項1 public ...