15 9 程序間通訊 共享儲存

2021-05-22 12:20:06 字數 924 閱讀 2040

因為資料不需要在客戶程序和伺服器程序之間複製,所以共享儲存是最快的一種ipc。使用共享儲存時要掌握的唯一竅門是多個程序之間對一給定儲存區的同步訪問。通常,訊號量或記錄鎖被用來實現對共享儲存訪問的同步。

返回值:若成功則返回指向共享儲存的指標,若出錯則返回-1

shmget獲得乙個共享儲存識別符號。size是該共享儲存段的長度(位元組)。實現通常將其向上取為系統頁長的整數倍。但是,若應用指定的size值並非系統頁長的整數倍,那麼最後一頁的餘下部分是不可使用的。如果正在建立乙個新段(一般是在伺服器程序中),則必須指定其size。如果正在引用乙個現存的段(乙個客戶程序),則將size指定為0。當建立一新段時,段內的內容初始化為0。

shmctl對共享儲存段執行多種操作。

shmat將共享儲存段連線到程序的位址空間中。共享儲存段連線到呼叫程序的哪個位址上與addr引數以及在flag中是否指定shm_rnd位有關。

如果addr非0,並且沒有指定shm_rnd,則此段連線到addr所指定的位址上。

如果addr非0,並且指定了shm_rnd,則此段連線到(addr-(addr mod ulus shmlba))所表示的位址上。

除非只計畫在一種硬體上執行應用程式,否則不應指定共享段所連線到的位址。所以一般應指addr為0,以便由核心選擇位址。shmat的返回值是該段所連線的實際位址,如果出錯則返回-1,如果shmat成功執行,那麼核心將使該共享儲存段shmid_ds結構中的shm_nattch計數器值加1。

shmat脫接共享儲存段。注意,這並不從系統中刪除其識別符號以及其資料結構。該識別符號仍然存在,直至某個程序(一般伺服器程序)呼叫shmctl(帶命令ipc_rmid)特地刪除它。

mmap函式可將乙個檔案的若干部分對映至程序位址空間,這在概念上類似於用shmat xsi ipc函式連線一共享儲存段。兩者之間的主要區別是,用mmap對映的儲存段是與檔案關聯的,而xsi共享儲存段則並無這種關聯。

程序間通訊 共享儲存

一 什麼是共享儲存 共享儲存允許兩個或更多程序共享一給定的儲存區。因為資料不需要在程序a和程序b之間複製,所以共享儲存是最快的一種ipc。那麼使用共享儲存需要注意的問題是什麼呢?因為是多個程序訪問乙個共同的儲存區,所以需要注意的問題就是多個程序如何實現對同一儲存區實現同步訪問。若程序a正在將資料放入...

Linux中程序間通訊 共享儲存

今天同樣來看看程序間通訊,前面幾篇介紹了管道,訊號量,訊息佇列,這篇是共享記憶體。共享儲存允許兩個或更多程序共享一給定的儲存區。因為資料不需要在客戶程序和伺服器程序之間複製,所以這是最快的一種ipc。使用共享儲存時要掌握的唯一竅門是多個程序之間對一給定儲存區的同步訪問。若伺服器程序正在將資料放入共享...

程序間通訊 共享記憶體

下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...