知識點查缺補漏貼01 程序間通訊之mmap檔案共享

2021-09-06 11:41:12 字數 2072 閱讀 2066

引文:

一、概念:什麼是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 並查集的精髓 即它的三種操作,結合實現 模板進行...