在共享内存的使用中,顾名思义,就是实现多个进程中使用同一个内存区域来实现数据的通信。这样就可以实现一个简单的客户端/服务器程序啦。
共享内存使用的函数有下面几个:
void* shmat(int shm_id , const void* shm_addr , int shmflg);
int chmctl(int shm_id , int cmd , struct shmid_ds* buf);
int shmdt(const void* shm_addr);
int shmget(key_t key , size_t size , int shmflg);
1.shmget()函数是用来创建一个共享内存区域的。和信号量一样,需要提供一个key来作为内存段的命名。
2.shmat()函数,在第一次创建共享内存的时候,它不能被任何进程访问,要想启动共享内存,就必须要连接到一个进程的地址空间。
3.shmdt()函数用来将共享内存从当前区域分离出来。
4.shmctl()函数是共享内存的控制函数
下面来看一个完整的基于共享内存的服务器/客户端的例子。在这个例子中。客户端负责创建一个共享区域,并且对里面的数据进行输出显示。在服务器端负责对共享区域进行数据的写入。
#ifndef SHM_COM_H
#define SHM_COM_H
#define TEXT_SZ 2048 //最大的文本大小
struct shared_use_st{
int written_by_you; //控制标记
char some_text[TEXT_SZ]; //文本缓冲区
};
#endif // SHM_COM_H
客户端:
#include <iostream>
#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<sys/shm.h>
#include "shm_com.h"
using namespace std;
struct shared