共享記憶體實現分為兩個步驟:
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...