共享記憶體是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;
}