父子程序共享記憶體通訊的三種方法

2021-09-07 17:21:15 字數 854 閱讀 8507

在支援map_anonymous的系統上,直接用匿名共享記憶體就可以,

mmap(null, sizeof(int), prot_read|prot_write,   map_anonymous|map_shared, -1, 0);

有些系統不支援匿名記憶體對映,則能夠使用fopen開啟/dev/zero檔案,然後對該檔案進行對映。能夠相同達到匿名記憶體對映的效果。

fd=open("/dev/zero",o_rdwr);

if(fd==-1)

addr=mmap(null,sizeof(int),prot_read|prot_write,map_shared,fd,0);

if(addr == null)

shmget 是老式的system v 共享記憶體模式,非常多系統都支援這樣的方法。

int  id;

//得到乙個共享記憶體識別符號或建立乙個共享記憶體物件並返回共享記憶體識別符號

id = shmget(ipc_private, shm->size, (shm_r|shm_w|ipc_creat));

if(id==-1)

//連線共享記憶體識別符號為shmid的共享記憶體,連線成功後把共享記憶體區物件對映到呼叫程序的位址空間。隨後可像本地空間一樣訪問

addr = shmat(id, null, 0);

if(addr == null){

perror("shmat:");

return -1;

}//完畢對共享記憶體的控制

if(shmctl(id, ipc_rmid, null)==-1)

共享記憶體實現父子程序通訊

父程序在核心空間建立了乙個共享記憶體,通過fork函式,父子程序通過fork函式繼承了shmid,所以父子程序可以對核心中同乙個物件操作,剛開始父程序不斷往物件裡寫,然後開始發訊號sigusr1給子程序,讓子程序讀。對於子程序來說,剛開始睡眠,等待父程序寫,然後被核心喚醒,讀共享記憶體。此時父程序開...

(三)程序通訊(三) 共享記憶體

目錄 28共享記憶體介紹 共享記憶體示意圖 管道 訊息佇列與共享記憶體傳遞資料對比 mmap函式 munmap函式 msync函式 29system v共享記憶體 共享記憶體資料結構 共享記憶體函式 shmge shmat shmdt shmctl 共享記憶體示例 共享記憶體區是最快的ipc形式,這...

程序間通訊 三 共享記憶體

共享記憶體是linux下倆程序通訊的一種方式,主要功能是讓兩個程序的虛擬位址都對映到同一片實體地址上,就可以通過這片實體地址進行資料的互動 mmap函式要求核心建立乙個新的虛擬記憶體區域,最好是從位址start開始的乙個區域,並將檔案描述符df指定的物件的乙個連續的片對映到這個新的區域,連續的物件片...