linux下,每個程序都有自己擁有的記憶體區域,程序的記憶體總是私有的。共享記憶體是從系統的空閒記憶體池中分配的,希望訪問它的每個程序連線它。這個連線過程稱為對映。
基本流程:編譯時要加庫檔案-lrt
shm_id=
shm_open
(ar**[1]
,o_rdwr|o_creat,
0644);
/*建立共享記憶體區*/
ftruncate
(shm_id,
100)
;/*修改共享區大小*/
fstat
(shm_id,
&buf)
;ptr=
mmap
(null
,buf.st_size,prot_read|prot_write,map_shared,shm_id,0)
;/*連線共享記憶體區*/
strcpy
(ptr,
"hello linux");
/*寫入共享記憶體區*/
printf
("%s\n"
,ptr)
;/*讀出共享記憶體區*/
shm_unlink
(ar**[1]
);/*刪除共享記憶體區*/
1. shm_open()函式
int shm_open(const char *name, int oflag, mode_t mode);
//建立或開啟乙個共享記憶體,成功返回乙個整數的檔案描述符,錯誤返回-1。
1.name:共享記憶體區的名字;
2.標誌位;open的標誌一樣
3.許可權位
shm_id=shm_open(ar**[1],o_rdwr|o_creat,0644);/*建立共享記憶體區*/
2.ftruncate()函式
功能: 調整檔案或共享記憶體區大小
標頭檔案: #include 函式原形: int ftruncate(int fd,off_t length);
引數:
fd 描述符
length 大小
返回值: 成功返回0,出錯返回-1
3. fstat()
當開啟乙個已存在的共享記憶體區物件時,我們可呼叫fstat來獲取有關該物件的資訊
功能: 獲得檔案或共享記憶體區的資訊
標頭檔案: #include #include #include 函式原形: int stat(const char *file_name,struct stat *buf);
引數:
file_name 檔名
buf stat結構
返回值: 成功返回0,出錯返回-1
對於普通檔案stat結構可以獲得12個以上的成員資訊,然而當fd指代乙個共享記憶體區物件時,只有四個成員含有資訊。
struct stat;
4.mmap
void *mmap(void *addr, size_t length, int prot, int flags,int fd, off_t offset);//位址對映
引數說明:
length: 欲建立對映區的大小
prot: 對映區許可權prot_read、prot_write、prot_read|prot_write
flags: 標誌位引數(常用於設定更新物理區域、設定共享、建立匿名對映區)
map_shared: 會將對映區所做的操作反映到物理裝置(磁碟)上,無血緣關係的程序通訊
map_private: 對映區所做的修改不會反映到物理裝置。
map_anonymous:匿名對映區
fd: 用來建立對映區的檔案描述符
offset: 對映檔案的偏移(4k的整數倍)
5、shm_unlink
shm_unlink(ar**[1]);/*刪除共享記憶體區*/
簡單的log模組
工程中用的是log4cpp這種庫,然後為了多語言 修改日誌免編譯 可xml配置 純cpp庫可用 qt庫可用 配套工程就寫了3個。開發小工具時,往往就乙個小函式。ifndef logger h define logger h include include void writelog const st...
Log日誌學習
log4j2 spring boot使用 一,引入依賴 org.springframework.boot spring boot starter web org.springframework.boot spring boot starter logging org.springframework....
Mybatis模組 Log4j日誌
什麼是log4j 1 log4j是apache的乙個開源專案,通過使用log4j,我們可以控制日誌資訊輸送的目的地是控制台 檔案 gui元件 2 我們也可以控制每一條日誌的輸出格式 3 通過定義每一條日誌資訊的級別,我們能夠更加細緻地控制日誌的生成過程 4 通過乙個配置檔案來靈活地進行配置,而不需要...