1.共享記憶體(shared memory)是最快的ipc,多個程序同時對一段記憶體位址操作,它沒有同步機制,
所以需要同步,常把訊號量和共享記憶體結合起來使用。
2.相關函式:#include
建立共享記憶體:int shmget(key_t key, size_t size, int flag);
建立或獲取乙個共享記憶體:成功返回共享記憶體id,失敗返回-1
連線共享記憶體:void *shmat(int shm_id, const void *addr, int flag);
連線共享記憶體到當前程序的位址空間:成功返回指向共享記憶體的指標,失敗返回-1
斷開共享連線:int shmdt(void *addr);
斷開與共享記憶體的連線:成功返回0,失敗返回-1
控制共享連線:int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
控制共享記憶體的相關資訊:成功返回0,失敗返回-1
struct shmid_ds
; #define text_sz 2048
struct shared_use_st
//將共享記憶體連線到當前程序的位址空間
shm = shmat(shmid, 0, 0);
if(shm == (void*)-1)
printf("\nmemory attached at %x\n", (int)shm);
//設定共享記憶體
shared = (struct shared_use_st*)shm;
shared->written = 0;
while(running)//讀取共享記憶體中的資料
else//有其他程序在寫資料,不能讀取資料
sleep(1);
} //把共享記憶體從當前程序中分離
if(shmdt(shm) == -1)
//刪除共享記憶體
if(shmctl(shmid, ipc_rmid, 0) == -1)
exit(exit_success);
}
//shmwrite
#include #include #include #include #include #include "shmdata.h"
int main()
//將共享記憶體連線到當前程序的位址空間
shm = shmat(shmid, (void*)0, 0);
if(shm == (void*)-1)
printf("memory attached at %x\n", (int)shm);
//設定共享記憶體
shared = (struct shared_use_st*)shm;
while(running)//向共享記憶體中寫資料
//向共享記憶體中寫入資料
printf("enter some text: ");
fgets(buffer, bufsiz, stdin);
strncpy(shared->text, buffer, text_sz);
//寫完資料,設定written使共享記憶體段可讀
shared->written = 1;
//輸入了end,退出迴圈(程式)
if(strncmp(buffer, "end", 3) == 0)
running = 0;
} //把共享記憶體從當前程序中分離
if(shmdt(shm) == -1)
sleep(2);
exit(exit_success);
}
程序間通訊 共享記憶體
下面是自己寫的乙個簡單的共享記憶體的程序間通訊的例子。共享記憶體是用於程序間大量資料共享的一種方法。include include include include include include int main if buf1 shmat shmid,0,0 void 1 strcpy buf1,...
程序間通訊 共享記憶體
共享記憶體是被多個程序共享的一部分物理記憶體。共享記憶體是程序間共享資料的一種最快的方式,乙個程序向共享記憶體區域寫入資料,共享這個記憶體區域的所有程序就可以立刻看到其中的內容。共享記憶體實現分兩個步驟 建立共享記憶體,使用shmget函式 對映共享記憶體,使用shmat函式 共享記憶體是一種最為高...
程序間通訊 共享記憶體
共享記憶體允許兩個或更多程序共享一塊給定的儲存區,因為資料不需要在不同程序之間訪問,這是最快的一種ipc 傳輸資訊量很大,通過記憶體空間對映程序空間實現,若伺服器程序正在將資料放入共享儲存區,則在它做完這一操作之前,客戶程序不應取這些資料,通常訊號量用來實現對共享儲存訪問的同步。核心為每個共享儲存段...