Linux處理序間通訊中的共用記憶體是什嗎?共用記憶體的函數執行個體,linux函數

來源:互聯網
上載者:User

Linux處理序間通訊中的共用記憶體是什嗎?共用記憶體的函數執行個體,linux函數
一、共用記憶體是什麼

共用記憶體是兩個進程之間最快的也是最有用的通訊方式。

由於之前我們所介紹的通訊方式都要進過核心和自己的使用者空間之間進行傳遞,而共用記憶體則是進程直接把記憶體映射到自己進程的地址空間內,所以A進程和B進程可直接看到對方對這塊地區所進行的操作。

由於進程可以直接讀寫記憶體,並不需要任何的資料的拷貝,這一點和前面所介紹的進程間的通訊就不一樣,所以它的效率很高,換句話說,進程不再通過執行進入核心的系統調用來傳遞彼此的資料。

二、共用記憶體的結構

和介紹之前的處理序間通訊一樣,我們來看下下面共用記憶體的結構。

struct shmid_ds {struct ipc_perm shm_perm;    /* Ownership and permissions */size_t          shm_segsz;   /* Size of segment (bytes) */time_t          shm_atime;   /* Last attach time */time_t          shm_dtime;   /* Last detach time */time_t          shm_ctime;   /* Last change time */pid_t           shm_cpid;    /* PID of creator */pid_t           shm_lpid;    /* PID of last shmat(2)/shmdt(2) */shmatt_t        shm_nattch;  /* No. of current attaches */               ...};
三、共用記憶體的函數(1)shmget

shmget函數用來建立共用記憶體。

函數原型

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

參數

key_t key:第一個參數是和訊息佇列中的key是一樣的,表示共用記憶體的名字。 size_t size:第二個參數指的是多大的空間 int shmflg:是許可權,有九個標誌位。可以是IPC_CREAT | 0644 傳回值

成功返回一個非負的整數,即該共用記憶體的標識符,失敗返回-1

(2)shmat

將共用記憶體掛在自己的地址空間上

void *shmat(int shmid, const void *shmaddr, int shmflg);

傳回值

成功返回0,失敗返回-1 參數

shmid:共用記憶體標誌。 shmaddr:指定連結的地址,一般情況下我們取NULL,表示自動選取一個地址。 shmflg:標記,兩個可能的取值為SHM_RND和SHM_RDONLY,一般情況下取0。

(3)shmdt

我們需要注意的是共用記憶體的刪除是沒有人映射的時候才可以刪除,他和訊息佇列不一樣,有人映射的時候是無法刪除。

將不用的共用記憶體從自己的地址空間刪除。

int shmdt(const void *shmaddr);

參數:

由shmdt返回的指標。 傳回值

成功返回0,失敗返回-1

(4)shmctl

shmctl用來控制共用記憶體。

nt shmctl(int shmid, int cmd, struct shmid_ds *buf);

參數

shmid:由shmget返回共用記憶體的標識符 cmd:將要採取的動作 buf:指向一個儲存共用記憶體的模式狀態和存取權限的資料結構 傳回值

成功返回0,失敗返回-1

cmd有以下三個命令可供選擇,這個和訊息佇列的ctl操作很類似

IPC_STAT:把shmid_ds結構中的資料設定為共用記憶體的當前關聯值 IPC_SET:有足夠的許可權下,會把共用記憶體的當前值設定為由shmid_ds資料結構中給出的值 IPC_RMID:刪除共用記憶體

四、如何讀共用記憶體

直接讀自己的進程空間,因為此時記憶體映射到了進程地址空間內。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.