zz shmdt與shmctl的區別

2021-09-08 16:37:22 字數 613 閱讀 2263

先看看 shmctl() 

原型: int shmctl ( 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把這個記憶體斷標記為刪除,那麼可以保證程序在離開這個共享段時(意外),可以保證刪除這個共享記憶體。

shmdt與shmctl的區別

參考 先看看 shmctl 原型 intshmctl int shmqid,int cmd,struct shmid ds buf 返回 成功為0,失敗 為 1 這個特殊的呼叫和semctl 呼叫幾乎相同,因此,這裡不進行詳細的討論。有效命令的值是 ipc set 對乙個共享段來說,從buf引數中取...

與 的區別? 與 的區別?

相同點 和 都是表示與的邏輯運算子,其運算結果一致 不同點 邏輯與 當兩邊的表示式都為true的時候,整個運算結果才為true,否則為false。短路與 當第乙個表示式的值為false的時候,則不再計算第二個表示式 注意 還可以做位運算子,當表示式不是boolean型別的時候 例項1 public ...

CRM PLM SCM MES與ERP的聯絡與區別

概念crm customer relationshipmanagement,客戶關係管理 企業為提高核心競爭力,利用相應的資訊科技以及網際網路技術來協調企業與顧客間在銷售 營銷和服務上的互動,從而提公升其管理方式,向客戶提供創新式的個性化的客戶互動和服務的過程。其最終目標是吸引新客戶 保留老客戶以及...