XSI IPC之共享内存 (2)

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

函数声明

#include 

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 
#include 
#include 
#include 
#include 
#include 
#include 

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);
}

你可能感兴趣的:(XSI IPC之共享内存 (2))