Posted on 2013-01-06 10:37
鑫龍 閱讀(598)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
linux編程
mmap函數(shù)是unix/linux下的系統(tǒng)調(diào)用。
mmap系統(tǒng)調(diào)用并不是完全為了用于共享內(nèi)存而設(shè)計(jì)的。它本身提供了不同于一般對(duì)普通文件的訪問方式,進(jìn)程可以像讀寫內(nèi)存一樣對(duì)普通文件的操作。而Posix或系統(tǒng)V的共享內(nèi)存IPC則純粹用于共享目的,當(dāng)然mmap()實(shí)現(xiàn)共享內(nèi)存也是其主要應(yīng)用之一。
mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。普通文件被映射到進(jìn)程地址空間后,進(jìn)程可以像訪問普通內(nèi)存一樣對(duì)文件進(jìn)行訪問,不必再調(diào)用read(),write()等操作。mmap并不分配空間, 只是將文件映射到調(diào)用進(jìn)程的地址空間里(因?yàn)椴⒉环峙淇臻g所以所映射的文件必須已經(jīng)具有大小,空文件會(huì)產(chǎn)生錯(cuò)誤), 然后你就可以用memcpy等操作寫文件, 而不用write()了.寫完后用msync()同步一下, 你所寫的內(nèi)容就保存到文件里了. 不過這種方式?jīng)]辦法增加文件的長(zhǎng)度, 因?yàn)橐成涞拈L(zhǎng)度在調(diào)用mmap()的時(shí)候就決定了.