引文:
一、概念:什麼是mmap?
通過共享儲存實現程序間通訊是乙個主要的程序間通訊的方式。它包括磁碟檔案的共享和記憶體的共享,以前總是關注記憶體的共享,而忽略了磁碟檔案的共享,也就是這裡要講的mmap。mmap位址對映是linux系統提供的一種功能強大的系統呼叫,最典型的應用是用於顯示卡記憶體的對映。同樣,對於普通的硬碟檔案也可以進行mmap系統呼叫。mmap()系統呼叫使得程序之間通過對映同乙個普通檔案實現共享記憶體。普通檔案被對映到程序位址空間後,程序可以向訪問普通記憶體一樣對檔案進行訪問,不必再呼叫read(),write()等操作。
注:實際上,mmap()系統呼叫並不是完全為了用於共享記憶體而設計的。它本身提供了不同於一般對普通檔案的訪問方式,程序可以像讀寫記憶體一樣對普通檔案的操作。而posix或系統v的共享記憶體ipc則純粹用於共享目的,當然mmap()實現共享記憶體也是其主要應用之一。
函式原型如下所示:
#include
void * mmap(void *start, size_t length, int prot , int flags, int fd, off_t offset); //建立對映
int munmap(void *start, size_t length); //解除對映
二、引數說明:
length:對映的長度。
prot:期望的記憶體保護,注意不要和開啟檔案時的屬性衝突。屬性有prot_exec、prot_read、prot_write、prot_none,分別為可執行、可讀、可寫、不可訪問。
flags:指明映像物件的型別。型別有:map_fixed(只使用指定的start虛擬位址)、map_shared(與其他程序共享該對映)、map_private(建立乙個寫拷貝的對映,保持資料不影響原有檔案)。
fd: 開啟的檔案控制代碼。
offset: 指明在檔案中的偏移,注意:偏移也必須按頁尺寸對齊。
其中最難理解的是start引數,它填入的是程式設計師期望使用的虛擬位址。如果該虛擬位址不衝突,那麼mmap系統呼叫返回的值就應該是該虛擬位址。
三、**例項
本例是開啟乙個普通的檔案,對其進行
mmap
,然後讀取檔案內容:
1 #include /*for mmap and munmap
*/2 #include /*
for open
*/3 #include /*
for open
*/4 #include /*
for open
*/5 #include /*
for lseek and write
*/6 #include 7
int main(int argc, char **argv)
818 fd = open(argv[1], o_rdwr | o_creat, s_irusr |s_iwusr);
19 flength = lseek(fd, 1
, seek_end);
20 write(fd, "
\0", 1); /*
在檔案最後新增乙個空字元,以便下面printf正常工作
*/21 lseek(fd, 0
, seek_set);
允許讀23 map_private, //
不允許其它程序訪問此記憶體區域
24 fd, 0
);25
/*使用對映區域.
*/26 printf("
%s\n
為了保證這裡工作正常,引數傳遞的檔名最好是乙個文字檔案
*/27
close(fd);
2829
return0;
30 }
四、輸出結果:新建檔案1.txt 隨意輸入一些內容即可
[zhangzl@localhost mmap]$ ./ex01 1.txt
2hello
world.
密碼學基礎知識(十)查缺補漏(缺)
今天密碼學結束了,哎,都是淚啊,答題時發現腦袋裡都是思想,公式沒記多少,就主要記了des aes rc4 rsa的具體演算法了,還把lsfr的特徵多項式怎麼裝換成輸出f忘了。所以現在補一下那些漏了的知識 lfsr的特徵多項式,其實就是間接的函式f,有了函式f,自然模2加法就得到輸出和週期了。由於密碼...
知識查差缺不漏貼 索引的分類
一 引言 今晚突然間被人問起關於索引分類的問題,居然出現了腦子的短路,沒有回答上來,很是不應該,蒐集一下資料,算是立此存照。二 建立索引的優點 1.大大加快資料的檢索速度 2.建立唯一性索引,保證資料庫表中每一行資料的唯一性 3.加速表和表之間的連線 4.在使用分組和排序子句進行資料檢索時,可以顯著...
並查集 知識點
並查集學習 l 並查集 union find sets 一種簡單的用途廣泛的集合.並查集是若干個不相交集合,能夠實現較快的合併和判斷元素所在集合的操作,應用很多,如其求無向圖的連通分量個數等。最完美的應用當屬 實現kruskar演算法求最小生成樹。l 並查集的精髓 即它的三種操作,結合實現 模板進行...