Linux 共享記憶體

2021-07-24 05:21:20 字數 2538 閱讀 6633

shm系列函式實現共享記憶體

void * shm_mmap_anon(size_t len, int prot, int flags)

return area;

}

mmap函式

#include 

void *mmap(void *addr, size_t length, int prot, int flags,

int fd, off_t offset);

引數

addr:指定對映儲存區的起始位址,一般指定為null,說明由系統指定。

len:對映儲存區的長度。

prot:prot_read , prot_write, prot_exec, prot_none

flags:map_private, map_shared, map_anonymous

fd:對映的檔案描述符

offset:對映檔案的其實位置,一般為0

munmap函式

#include 

int munmap(void *addr, size_t length);

api介面

shm.h

#ifndef _shm_h

#define _shm_h

void * shm_mmap_anon(size_t len, int prot, int flags);

void * shm_mmap_file(void *addr, size_t len, int prot, int flags, int fd, off_t offset);

int shm_munmap(void *addr, size_t len);

int shm_get(key_t key, size_t size, int flag);

void *shm_at(int shmid, const

void *addr, int flag);

int shm_ctl(int shmid, int cmd, struct shmid_ds *buf);

int shm_remove(int shmid);

int shm_dt(const

void *addr);

#endif

shm.c

#include 

#include

#include

#include

#include

#include

#include "shm.h"

void * shm_mmap_anon(size_t len, int prot, int flags)

return area;

}void * shm_mmap_file(void *addr, size_t len, int prot, int flags, int fd, off_t offset)

return area;

}int shm_munmap(void *addr, size_t len)

return val;

}int shm_get(key_t key, size_t size, int flag)

return shmid;

}void * shm_at(int shmid, const

void *addr, int flag)

return area;

}int shm_ctl(int shmid, int cmd, struct shmid_ds *buf)

return val;

}int shm_remove(int shmid)

return val;

}//如果成功,shmdt將使相關shmid_ds 結構中的shm_nattch 計數器值減 1,類似於unlink的用法

int shm_dt(const

void *addr)

return val;

}

例程

#include 

#include

#include

#include

#include

#include

#include

#include

#include "shm.h"

int main(void)

}sem_t *sem = sem_open("/home", o_creat, 0666, 1);

while(1)

return

0;}

Linux 共享記憶體

一 概念 共享記憶體是被多個程序共享的一部分物理記憶體,是程序間共享資料的最快的一種方法。二 實現 分為兩個步驟 1 建立共享記憶體。2 對映共享記憶體。1 建立 int shmget key t key,int size,int shm 當key的取值為 ipc private 時,將建立一塊新的...

linux共享記憶體

linux共享記憶體使用 標頭檔案 include 1 建立共享記憶體 int shmget key t key,size t size,int shm 建立成功以後會返回乙個共享記憶體id,建立失敗返回 1。2 獲取共享記憶體 void shmat int shmid,const void shm...

linux 共享記憶體

共享記憶體解決的問題是 任意兩個程序之間的通訊如果是有名管道,是沒有辦法對管道中間的資料獲取讀和寫操作的,只能是兩段的資料,那麼如何對所有的資料進行操作 共享記憶體 共享記憶體也是通過核心來完成 命令 ipcs m p s 共享記憶體的工作機制如下所示 首先linux系統執行的每乙個程式,都是乙個程...