天天看點

linux共享記憶體簡析

共享記憶體是IPC的一種機制,允許兩個不相關的程序共享同一塊記憶體

//共享記憶體可以雙向通信,但其本身沒有相應機制,需要程式編寫者設計,本例為單向通信(分為讀端和寫端)。

共享記憶體讀端:

#include <stdio.h>

#include <unistd.h>

#include <string.h>

#include <stdlib.h>

#include <sys/ipc.h>

#include <sys/shm.h>

//自定義資料結構,flag為同步機制标志:flag 為1表示讀端可讀, flag為1表示寫端可寫;str為資料存儲的字元數組

struct my_shared

{

int flag;

char str[1024];

};

int main(void)

void *shared_memory = NULL;

struct my_shared *shared_buff = NULL;

int running = 1;

int shmid;

//建立共享記憶體辨別

shmid = shmget((key_t)1234, sizeof(struct my_shared), 0666|IPC_CREAT);

if(shmid < 0)

perror("fail to shmget");

exit(1);

}

//連接配接共享記憶體到程序位址空間

shared_memory = shmat(shmid, NULL, 0);

if(shared_memory == NULL)

perror("fail to shmat");

shared_buff = (struct my_shared *)shared_memory;

shared_buff->flag = 0;

while(running)

{

//flag為1,讀資料

if(shared_buff->flag)

printf("shared_memory message is: %s\n", shared_buff->str);

if(strncmp(shared_buff->str, "end", 3) == 0)

running = 0;

//把共享從本程序空間分離

if(shmdt(shared_memory) == -1)

perror("fail to shmdt");

//删除共享記憶體

if(shmctl(shmid, IPC_RMID, 0) == -1)

perror("fail to shmctl");

return 0;

}

繼續閱讀