shmdt與shmctl的區別

2021-08-26 20:11:47 字數 544 閱讀 6706

參考:

先看看 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 ...