Unix下操作共用記憶體

來源:互聯網
上載者:User

shmat

作用:共用記憶體區對象映射到調用進程的地址空間

核心處理函數: void *shmat( int shmid , char *shmaddr , int shmflag );shmat()是用來允許本進程訪問一塊共用記憶體的函數。

int shmid是那塊共用記憶體的ID。

char *shmaddr是共用記憶體的起始地址

int shmflag是本進程對該記憶體的操作模式。如果是SHM_RDONLY的話,就是唯讀模式。其它的是讀寫入模式

成功時,這個函數返回共用記憶體的起始地址。失敗時返回-1

最近用到記憶體共用,收集整理了些資料,做了個簡單的對比

  mmap系統調用 系統V共用記憶體
擷取共用

記憶體ID

#include <sys/mman.h>

fd=open(name ,flag,mode);

if(fd<0)

….

#include <sys/ipc.h>

#include <sys/shm.h>

int shmget(key_t key, size_t size, int shmflg);

映射記憶體 ptr=mmap(NULL,len, PROT_READ|PROT_WRITE, 

MAP_SHARED , fd , 0); 

void *shmat( int shmid , char *shmaddr , int shmflag );
解除映射 int munmap( void * addr, size_t len ) ; int shmdt( char *shmaddr );

使進程中的映射記憶體無效化,不可以使用。但是保留空間

其它 同步:

int msync ( void * addr , size_t len, int flags);

控制:

shmctl( shmid , IPC_STAT , &buf ); 

// 取得共用記憶體的狀態

shmctl( shmid , IPC_RMID , &buf ); 

// 刪除共用記憶體–刪除共用記憶體,徹底不可用,釋放空間

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.