共享記憶體的相關知識

2021-07-24 01:48:44 字數 2365 閱讀 1544

共享記憶體實現分為兩個步驟:

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

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

3. 分離共享記憶體 

4. 控制、刪除共享記憶體 

共享記憶體的函式實現

共同標頭檔案

#include 

#include

#include

1.shmget

函式作用:在核心建立共享記憶體 

函式原型:int shmget ( key_t key, int size, int shm*** )

函式的引數:key:標識共享記憶體的鍵值:o_ipc_private

當key的取值為ipc_private,則函式shmget()將建立一塊新的共享記憶體;如果key的取值為0,而引數shm***中又設定ipc_private這個標誌,則同樣會建立一塊新的共享記憶體。

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

2.shmat

函式作用:對映共享記憶體,對映到各自的記憶體空間 

函式原型:char * shmat ( int shmid, char *shmaddr, int flag)

引數:shmid:shmget函式返回的共享儲存識別符號 

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

返回值: 如果成功,則返回共享記憶體對映到程序中的位址;如果失敗,則返回- 1 

3.shmdt

函式作用:撤消共享記憶體的對映 

函式原型:int shmdt ( char *shmaddr )程式例項

用共享記憶體來執行一方的收,和一方的發 

讀:

#include 

#include

#include

#include

#include

#include

#include

#include "shm_com.h"

int main(void)

/*對映共享記憶體*/

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;

/*迴圈的從共享記憶體中讀資料,直到讀到「end」為止*/

while(running)}}

/*刪除共享記憶體*/

if(shmdt(shared_memory)==-1)

exit(exit_success);

}

寫:

#include 

#include

#include

#include

#include

#include

#include

#include "shm_com.h"

int main(void)

/*對映共享記憶體*/

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;

/*迴圈的向共享記憶體中寫資料,直到寫入的為「end」為止*/

while(running)

printf("ener 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);

}

共享記憶體函式知識

1 shmget 標頭檔案 include include 作用 建立共享記憶體 原型 int shmget key t key,int size,intshm 引數 key 鍵值,可以為0 也可以為ipc private 新的共享記憶體。size 記憶體大小 返回值 成功返回共享記憶體的識別符號 ...

php共享記憶體相關函式

共享記憶體函式類似於檔案操作函式,但無需處理乙個流,您將處理乙個共享記憶體訪問 id。param int key 標識系統中的共享記憶體段的數字 parma string flags 訪問模式,它非常類似於fopen函式的訪問模式 param int mode 記憶體段的許可權。您必須在這裡提供乙個...

docker複製相關,調整shm共享記憶體

docker中執行selenium的自動化,啟動之後報頁面崩潰失敗,網上查說是shm記憶體不夠導致,df h命令檢視shm記憶體才64m,啟動一次瀏覽器不關閉就占用超過50 檢視了伺服器上的所有docker的shm都是64m,可能後端服務不需要用到shm。網上找了一些命令未能處理掉這個問題 不管是d...