Linux system V共享記憶體函式

2021-09-26 14:54:31 字數 1285 閱讀 9682

共享記憶體區是最快的ipc形式。一旦這樣的記憶體對映到共享他的程序的位址空間,這些程序間資料傳遞不再涉及到核心。

示意圖:

原理:在物理記憶體開闢空間,對映。

共享記憶體函式

shmget

int shmget(key_t key,size_t size,int shm***);

功能:建立共享記憶體。

key:共享記憶體斷名字。

size:共享記憶體大小。

shm***:由九個許可權標誌構成,他們的用法和建立檔案時使用mode模式標誌是一樣的。

返回值:成功返回乙個非負數,失敗返回-1。

shmat

void* shmat(int shmid,const void* shmaddr,int shm***);

功能:將共享記憶體段連線到程序位址空間。

shmid:共享記憶體標識。

shmaddr:指定連線的位址。

shm***:他的兩個可能取值為shm_rnd和shm_rdonly。

返回值:成功返回乙個指標,指向共享記憶體第乙個節;失敗返回-1。

shmaddr為null,核心自動選擇乙個位址。

shmaddr不為null且shm***無shm_rnd標記,則以shmaddr為連線位址。

shmaddr不為null且shm***設定了shm_rnd標記,則連線的位址會自動向下調整為shmlba的整數倍。

shm*** = shm_rdonly,表示連線操作用來唯讀共享記憶體。

shmdt

int shmdt(const void* shmaddr);

功能:將共享記憶體段與當前程序脫離。

shmaddr:由shmat所返回的指標。

返回值:成功返回0,失敗返回-1.

注意:共享記憶體段與當前程序脫離不等於刪除共享記憶體段。

shmctl

int shmctl(int shmid,int cmd,struct shmid_ds* buf);

功能:用於控制共享記憶體。

shmid:由shmget返回的共享記憶體標識碼。

cmd:將要採取的動作。

buf:指向乙個儲存著共享記憶體的模式狀態和訪問許可權的資料結構。

返回值:成功返回0,失敗返回-1。

cmd命令:

CreateFileMapping 共享記憶體

handle hfile,dword flprotect,dword dwmaximumsizehigh,dword dwmaximumsizelow,lpctstr lpname hfile 共享檔案控制代碼,不建立共享檔案,為invalid handle value flprotect 保護選項...

執行緒範圍內共享資料

我們可以先用所學知識來寫乙個 public class threadscopesharedata start static class a static class b 如果光像上面這樣寫的話,那毫無疑問,肯定是有問題的,如下圖所示並沒有實現執行緒共享 此時就實現執行緒內共享資料了 public c...

RHCE 建立系統內共享目錄

建立乙個共享目錄 home admins 特性如下 home admins目錄的組所有權是adminuseradminuser組的成員對目錄有讀寫和執行的許可權。除此之外的其他所有使用者沒有任何許可權 root使用者能夠訪問系統中的所有檔案和目錄 在 home admins目錄中建立的檔案,其組所有...