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系統執行的每乙個程式,都是乙個程...