程序間通訊之記憶體對映 mmap記憶體對映

2021-09-02 20:22:56 字數 1104 閱讀 2084

讀資料端程序

//mmanp_r.c

#include#include#include#include#include#include#define len 0x1000

int main()

close(fd);

while(1)

close(fd);

munmap(addr,len);

return 0;

}

寫資料端程序

//mmap_w.c

#include#include#include#include#include#include#define len 4096

int main()

else

lseek(fd,len-1,seek_set);

write(fd,"\0",1);

char *addr = mmap(null,len,prot_write|prot_read,map_shared,fd,0);

if(map_failed == addr)

int i =0;

while(1)

close(fd);

munmap(addr,len);

return 0;

}

mmap記憶體對映顧名思義是通過將磁碟檔案以shared的形式對映到記憶體中,然後通過向該段記憶體寫入資料和讀取資料來實現程序間的通訊,mmap函式的定義如下mmap(void, off_t offset); addr是要位址,len是對映的檔案長度,port是對映對分配的pages的操作許可權,flags是描述對映物件的型別。mmap相比於write和read對檔案操作要快的多,檔案的讀寫都是先到page cache中儲存,然後再緩衝到磁碟檔案,mmap直接操作記憶體page頁。不需要頻繁的讀取檔案。所以要快的多。

注意。mmap對映區域大小必須是物理頁大小(page_size)的整倍數(32位系統中通常是4k位元組),並且使用完以後應當使用munmap釋放對映段,否則將會造成記憶體洩漏。mmap函式的呼叫失敗的情況很多。比如內部不夠時,檔案讀寫許可權與對映引數不匹配等,呼叫的時候應當加以注意。

原創。如有錯漏歡迎指出

程序間通訊 mmap

void mmap void addr,size t length,int prot,int flags,int fd,off t offset 建立共享記憶體對映 引數 addr 指定對映區的首位址。通常傳null,表示讓系統自動分配 length 共享記憶體對映區的大小。檔案的實際大小 prot...

程序間通訊 記憶體對映

程序1的資料有時需要傳送給程序b,這可以通過記憶體對映實現。主要用到的函式 寫方式開啟對映,page writecopy 為寫操作留下備份 dword dwmaximumsizehigh,檔案對映的最大長度的高32位,一般設為0,用低32位一般就夠用了 dword dwmaximumsizelow,...

Linux 程序間通訊 mmap

讀操作 include include include include include include include struct ad struct ad ptr intmain int argc,char ar while 1 printf n for int i 0 i 5 i printf...