linux shm共享記憶體

2021-06-22 09:18:01 字數 1097 閱讀 7258

fork函式的特點概括起來就是「呼叫一次,返回兩次」,在父程序中呼叫一次,在父程序和子程序中各返回一次。

shmget 得到乙個共享記憶體識別符號或建立乙個共享記憶體物件並返回共享記憶體識別符號

shmat(把共享記憶體區物件對映到呼叫程序的位址空間) 連線共享記憶體識別符號為shmid的共享記憶體,連線成功後把共享記憶體區物件對映到呼叫程序的位址空間,隨後可像本地空間一樣訪問

shmdt(斷開共享記憶體連線)與shmat函式相反,是用來斷開與共享記憶體附加點的位址,禁止本程序訪問此片共享記憶體

shmctl(共享記憶體管理) 完成對共享記憶體的控制

#include #include #include #include #include #include #define size 1024

int main()

//建立子程序 呼叫fork會返回兩次 父程序返回建立的程序,子程序返回0

pid = fork();

if( pid == 0 )

strcpy( shmaddr, "hi,i am child process!\n");

//斷開對映

shmdt( shmaddr);

return 0;

}else if( pid > 0 )

printf("shm_segsz=%d bytes\n", buf.shm_segsz);

printf("parent pid=%d,shm_cpid=%d\n",getpid(),buf.shm_cpid);

printf("chlid pid=%d,shm_lpid=%d\n",pid,buf.shm_lpid);

//把共享記憶體對映到本地

shmaddr = (char *)shmat(shmid, null, 0);

if( (int)shmaddr == -1 )

printf("%s",shmaddr);

//斷開共享記憶體連線

shmdt(shmaddr);

//刪除共享記憶體

shmctl(shmid,ipc_rmid,null);

}else

return 0;

}

作業系統之共享儲存區詳解 Linux shm

在學習作業系統的時候,老師講到程序間通訊,今天在這裡介紹一下程序通訊中的共享儲存區通訊 共享記憶體分為兩種,以下是維基百科上的說法 硬體術語 共享記憶體指在多處理器的計算機系統中,可以被不同 處理器訪問的大容量記憶體。由於多個cpu需要快速訪問儲存器,這樣就要對儲存器進行快取。由於其他處理器可能也要...

Linux共享記憶體及共享記憶體API

共享記憶體區是最快的ipc 程序間通訊 形式。用共享記憶體從伺服器拷貝檔案資料到客戶端 共享記憶體基本api include include 1.int shmget key t key,size t size,int shm 功能 用來建立共享記憶體 key 是這個共享記憶體段的名字 size 共...

mysql共享記憶體 MySQL全域性共享記憶體介紹

前言 全域性共享記憶體則主要是 mysql instance mysqld程序 以及底層儲存引擎用來暫存各種全域性運算及可共享的暫存資訊,如儲存查詢快取的 query cache,快取連線線程的 thread cache,快取表檔案控制代碼資訊的 table cache,快取二進位制日誌的 binl...