XSI IPC之共享內(nèi)存 (2)

映射地址空間,只能用與有親緣關系

函數(shù)聲明

#include <sys/mman.h>

void *mmap(void *addr, size_t length, int prot, int flags  int fd, off_t offset);

參數(shù)含義

第一參數(shù)為映射空間地址,如果是NULL,則內(nèi)核自動分配到進程所在的第一個可用地址上,不傳NULL,則分配地址由用戶指定;

第二個參數(shù)為空間大小

第三個參數(shù)為權(quán)限,可選參數(shù)有

? PROT_EXEC Pages may be executed.

? PROT_READ Pages may be read.

? PROT_WRITE Pages may be written.

? PROT_NONE Pages may not be accessed.

第四個參數(shù)為附加選項常用可選參數(shù)有

? MAP_PRIVATE

? MAP_ANONYMOUS

? MAP_SHARED

第五個參數(shù)為文件描述符,如果文件描述符為-1,

第六個參數(shù)為文件偏移量

返回值

若成功,返回映射區(qū)起始地址

若出錯,返回MAP_FAILED

共享內(nèi)存示例2

#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <sys/mman.h>

int main(void)
{
    pid_t pid;
    void *ptr = NULL;

    ptr = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
    if (MAP_FAILED == ptr) {
        perror("mmap()");
        exit(1);
    }

    pid = fork();
    if (pid < 0) {
        perror("fork()");
        goto FORK_ERROR;
    }

    if (pid == 0) {
        memcpy(ptr, "map address", 11);
        exit(1);
    }

    wait(NULL);
    puts(ptr);

    munmap(ptr, 1024);

    exit(0);
FORK_ERROR:
    exit(1);
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Linux進程通信實現(xiàn)機制有很多,也有各自優(yōu)缺點和適用場景,關于她們之間的對比,等各種通信機制一一介紹后,再來一個...
    batbattle閱讀 4,211評論 3 13
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,910評論 0 13
  • 1. 簡介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存儲過程以及高級映射的優(yōu)秀的...
    笨鳥慢飛閱讀 6,224評論 0 4
  • 方法論自我訓練: 1,觀念養(yǎng)成: 上世紀中國最有影響的書就是《十萬個為什么》系列。 大部分科學知識都是枯燥的。 能...
    馬唐閱讀 349評論 0 0
  • 哲寓傳家訓 鄉(xiāng)村顯活力 記者/郭云光 日前,記者在廣東省羅定市探訪鄉(xiāng)村文化時目睹,該市上寧村哲寓(梁氏祖居)...
    哲寓閱讀 194評論 0 1

友情鏈接更多精彩內(nèi)容