XSI IPC之共享内存 (2)

映射地址空间,只能用与有亲缘关系

函数声明

#include <sys/mman.h>

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

参数含义

第一参数为映射空间地址,如果是NULL,则内核自动分配到进程所在的第一个可用地址上,不传NULL,则分配地址由用户指定;

第二个参数为空间大小

第三个参数为权限,可选参数有

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.

第四个参数为附加选项常用可选参数有

MAP_PRIVATE

MAP_ANONYMOUS

MAP_SHARED

第五个参数为文件描述符,如果文件描述符为-1,

第六个参数为文件偏移量

返回值

若成功,返回映射区起始地址

若出错,返回MAP_FAILED

共享内存示例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);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Linux进程通信实现机制有很多,也有各自优缺点和适用场景,关于她们之间的对比,等各种通信机制一一介绍后,再来一个...
    batbattle阅读 4,149评论 3 13
  • pyspark.sql模块 模块上下文 Spark SQL和DataFrames的重要类: pyspark.sql...
    mpro阅读 9,546评论 0 13
  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,796评论 0 4
  • 方法论自我训练: 1,观念养成: 上世纪中国最有影响的书就是《十万个为什么》系列。 大部分科学知识都是枯燥的。 能...
    马唐阅读 293评论 0 0
  • 哲寓传家训 乡村显活力 记者/郭云光 日前,记者在广东省罗定市探访乡村文化时目睹,该市上宁村哲寓(梁氏祖居)...
    哲寓阅读 174评论 0 1