共享記憶體簡介
(1)共享記憶體---不相關的程序訪問同乙個邏輯記憶體
(2)程序將同一段共享記憶體對映到自己的位址空間中
(3)對共享記憶體訪問的同步控制必須由程式設計師來負責
基本函式
//共享記憶體相關函式標頭檔案
#include //建立或者獲取共享記憶體,都是通過它實現
int shmget(key_t key, size_t size, int shm***);
//建立的共享記憶體段,將其對映到乙個程序的位址空間
void *shmat(int shm_id, const void *shm_addr, int shm***);
//將共享記憶體從當前程序中分離(並未刪除),當前程序不可再用
int shmdt(const void *shm_addr);
//共享記憶體的控制函式,通過cmd值控制
int shmctl(int shm_id, int cmd, struct shmid_ds *buf);
實現codes
shm_com.h
#define text_sz 2048
struct shared_use_st ;
consume.c
#include #include #include #include #include #include "shm_com.h"//定義共享記憶體中存放的資料結構
int main()
shared_memory = shmat(shmid, (void *)0, 0);
if (shared_memory == (void *)-1)
printf("memory attached at %x\n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
shared_stuff->written_by_you = 0;
while(running)
}
if (shmdt(shared_memory) == -1)
if (shmctl(shmid, ipc_rmid, 0) == -1)
exit(exit_success);
}
produce.c
#include #include #include #include #include #include "shm_com.h"
int main()
shared_memory = shmat(shmid, (void *)0, 0);
if (shared_memory == (void *)-1)
printf("memory attached at %x\n", (int)shared_memory);
shared_stuff = (struct shared_use_st *)shared_memory;
while(running)
printf("enter some text: ");
fgets(buffer, bufsiz, stdin);
strncpy(shared_stuff->some_text, buffer, text_sz);
shared_stuff->written_by_you = 1;
if (strncmp(buffer, "end", 3) == 0)
} if (shmdt(shared_memory) == -1)
exit(exit_success);
}
Linux下共享記憶體程式設計
利用共享記憶體 share memory 可以讓我們在任意兩個程序之間傳遞資料,而且也是相對容易實現的一種方法,在正常情況下,乙個程序所使用的記憶體是不允許其它程序訪問的,但是通過共享記憶體可以實現資料的共享。使用共享記憶體用到的api函式有 include include include key ...
Linux 共享記憶體
一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...
linux共享記憶體
linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...