程序通訊 共享記憶體 聽課筆記

2021-08-30 23:14:09 字數 1325 閱讀 7471

多個程序共享一段物理記憶體

是程序間共享資料最快的方法

[size=x-large]步驟[/size]

1 建立共享記憶體, 使用shmget函式

2 對映共享記憶體, 使用shmat函式, 將共享記憶體對映到具體的程序空間去

3 解除對映共享記憶體, 使用shmdt函式

4 刪除共享記憶體, 使用shmctl函式

[size=x-large]建立[/size]

int shmget(key_t key, int size, int shm***)

key: 標識共享記憶體的鍵值 0 或 ipc_private

ipc_private-->將建立一塊新的共享記憶體

0------------>引數shm***又設定ipc_private這個標識,同樣會建立一塊新的共享記憶體

返回值: 成功返回共享記憶體識別符號, 失敗返回-1

[size=x-large]對映[/size]

void *shmat(int shmid, char *shmaddr, inf flag)

引數:shmid: shmget返回的共享記憶體識別符號

shmaddr: 共享記憶體的起始位址, 0-->系統自動分配

flag: 以什麼方式來確定對映的位址,通常為0

返回值:

成功則返回共享記憶體對映到程序中的起始位址

失敗返回-1

[size=x-large]解除對映[/size]

int shmdt(char *shmaddr)

示例:

#include

#include

#include

#include

#include

#include

#include

#include

#include

#define perm s_irusr|s_iwusr//共享記憶體可讀可寫

/* 共享記憶體 */

int main(int argc,char **argv)

/* 建立共享記憶體 */

if((shmid=shmget(ipc_private,1024,perm))==-1)

/* 建立子程序 */

if(fork()) // 父程序寫

else // 子程序讀 }

程序通訊 共享記憶體

定義 共享記憶體,就是通過核心操作,在記憶體上開闢一塊供多個程序共同訪問的記憶體塊。這塊記憶體塊的建立和 銷毀是由核心來控制 當然,也可以在程序內部呼叫系統庫函式來建立和銷毀,類似於訊息機制和訊號 量機制 在這個記憶體塊上,程序可以像操作記憶體一樣操作共享區記憶體。作用 第乙個,就是提供程序間大資訊...

程序通訊共享記憶體

共享記憶體是允許多個程序共享記憶體 共享記憶體結構 struct shmid ds struc ipc permshm perm 指向該記憶體指標 int shm segsz 共享記憶體的大小 ushort shm lkcnt 共享記憶體被鎖定的時間 pid t shm cpid 最近呼叫shomp...

程序通訊 管道聽課筆記

size medium 程序間通訊 ipc 作用 size 1.資料傳輸 2.共享資源 3.通知事件 4.程序控制 size medium ipc的方式 6種 size 1.管道 pipe 和有名管道 fifo 2.訊號 signal 3.訊息佇列 4.共享記憶體 5.訊號量 6.套接字 size ...