系統(tǒng)調(diào)用mmap()用于共享內(nèi)存的兩種方式:
(1)使用普通文件提供的內(nèi)存映射:適用于任何進(jìn)程之間;此時(shí),需要打開或創(chuàng)建一個(gè)文件,然后再調(diào)用mmap();典型調(diào)用代碼如下:通過mmap()實(shí)現(xiàn)共享內(nèi)存的通信方式有許多特點(diǎn)和要注意的地方
(2)使用特殊文件提供匿名內(nèi)存映射:適用于具有親緣關(guān)系的進(jìn)程之間;由于父子進(jìn)程特殊的親緣關(guān)系,在父進(jìn)程中先調(diào)用mmap(),然后調(diào)用fork()。那么在調(diào)用fork()之后,子進(jìn)程繼承父進(jìn)程匿名映射后的地址空間,同樣也繼承mmap()返回的地址,這樣,父子進(jìn)程就可以通過映射區(qū)域進(jìn)行通信了。注意,這里不是一般的繼承關(guān)系。一般來說,子進(jìn)程單獨(dú)維護(hù)從父進(jìn)程繼承下來的一些變量。而mmap()返回的地址,卻由父子進(jìn)程共同維護(hù)。
對于具有親緣關(guān)系的進(jìn)程實(shí)現(xiàn)共享內(nèi)存最好的方式應(yīng)該是采用匿名內(nèi)存映射的方式。此時(shí),不必指定具體的文件,只要設(shè)置相應(yīng)的標(biāo)志即可.
![]() |