posix提供了兩種在無親緣關係程序間共享記憶體區的方法:
(2)共享記憶體區物件:先有shm_open開啟乙個posix ipc名字(也可以是檔案系統中的乙個路徑名),然後呼叫mmap將返回的描述符對映到當前程序的位址空間。
者兩種方法多需要呼叫mmap,差別在於作為mmap的引數之一的描述符的獲取手段。
posix共享記憶體區涉及以下兩個步驟要求:
(1)指定乙個名字引數呼叫shm_open,以建立乙個新的共享記憶體區物件或開啟乙個已經存在的共享記憶體區物件。
(2)呼叫mmap把這個共享記憶體區對映到呼叫程序的位址空間。
注意:mmap用於把乙個記憶體區物件對映到呼叫程序位址空間的是該物件的乙個已經開啟描述符。
1、shm_open
#include
int shm_open(const char *name, int oflag, mode_t mode);
1)name 共享記憶體區的名字
2)oflag 標誌位
3)mode 許可權位,它指定o_creat標誌的前提下使用。
2、shm_unlink
int shm_unlink(const char *name);
刪除乙個共享物件的名字
3、ftruncate
int ftruncate(int fd, off_t length);
將引數fd指定的檔案大小改為引數length指定的大小
普通檔案或共享記憶體區物件的大小都可以通過呼叫ftruncate修改
4、fstat
int fstat(int fd, struct stat *buf);
檢視狀態
當開啟乙個已存在的共享記憶體區物件時,我們可呼叫fstat來獲取有關該物件的資訊
對於普通檔案stat結構可以獲得12個以上的成員資訊,然而當fd指代乙個共享記憶體區物件時,只有四個成員含有資訊。
struct stat
;
Posix共享記憶體區
1 概述 posix提供了兩種在無親緣關係程序間共享記憶體區的方法 者兩種方法多需要呼叫mmap,差別在於作為mmap的引數之一的描述符的獲取手段。2 posix共享記憶體區物件 posix共享記憶體區涉及以下兩個步驟要求 1 指定乙個名字引數呼叫shm open,以建立乙個新的共享記憶體區物件或開...
第13章 Posix共享記憶體區
原始碼目錄 include include for mode constants include for o constants intshm open const char name,int oflag,mode t mode int shm unlink const char name link...
POSIX共享記憶體
本文參考 嵌入式linux開發教程 和 linux unix系統程式設計手冊 共享記憶體是允許兩個不相關的程序訪問同乙個邏輯記憶體的程序間通訊方法,是在兩個正在執行的程序之間共享和傳遞資料的一種非常有效的方式。不同程序之間的共享記憶體通常安排為同一段物理記憶體。程序可以將同一段共享記憶體連線到它們自...