共享記憶體區是最快的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目錄中建立的檔案,其組所有...