共享記憶體
共享記憶體區是最快的ipc形式,一旦這樣的記憶體對映到共享它的程序位址空間,這些程序間資料傳遞不再涉及核心,也就是說程序不再通過執行進入核心的系統呼叫來傳遞彼此的資料。
共享記憶體的優點:
共享記憶體是程序間通訊最快的,可以減少拷貝次數。共享記憶體不提供任何互斥和同步機制,必須由使用者自己完成。
注意:共享記憶體的建立是以頁為單位的
systemv ipc(共享記憶體)資源的生命週期隨核心
共享記憶體函式:
shmget函式
功能:建立共享記憶體
原型: int shmget(key_t key, size_t size, int shm***);
引數: key:該共享記憶體段的名字(標識記憶體段,類似於檔案識別符號inode)
size:共享記憶體大小
shmget:由九個許可權標誌構成,它們的用法和建立檔案時使用的mode模式標誌是一樣的
返回值:成功返回非負整數,即該共享記憶體段的標識碼;失敗返回-1。
shmat函式
原型:void *shmat(int shmid, const void *shmaddr, int shm***);
引數: shmid:共享記憶體標識
shmaddr:指定連線的位址
shm***:它的兩個可能取值是shm_rnd和shm_rdonly
返回值:成功返回乙個指標,指向共享記憶體第乙個節;失敗返回-1
說明:shmdt函式
功能:將共享記憶體段與當前程序脫離
原型:
int shmdt(const void *shmaddr);
引數 shmaddr:由shmat所返回的指標
返回值:成功返回0;失敗返回-1
將共享記憶體與當前程序脫離不等於刪除共享記憶體段
刪除共享記憶體段分兩步:
1.去關聯
2.刪除(即釋放記憶體空間)
shmctl函式
功能:用於控制共享記憶體
原型: int shmctl(int shmid, int cmd, struct shmid_ds *buf);
引數: shmid:由shmget返回的共享記憶體標識碼
cmd:將要採取的措施(三個可取值 ipc_stat,ipc_set, ipc_rmid)
buf:指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構
返回值:成功返回0;失敗返回-1;
引數說明:
ipc_stat:把shmid_ds結構中的資料設定為共享記憶體的關聯值
ipc_set:把程序有足夠許可權的前提下,把共享記憶體的當前關聯值設定為shmid_ds資料結構中給出的值
ipc_rmid:刪除共享記憶體段
程序間通訊 共享記憶體
下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...
程序間通訊 共享記憶體
共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...
程序間通訊 共享記憶體
共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...