Linux程式設計 共享記憶體

2021-08-01 02:26:26 字數 2003 閱讀 1074

共享記憶體簡介  

(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...