linux下使用共享内存实现客户端/服务器

本文介绍了如何在Linux环境下利用共享内存实现客户端和服务器之间的数据通信。主要涉及shmget、shmat、shmdt和shmctl等关键函数的使用。通过一个实例展示了客户端创建共享内存并读取,而服务器端则负责写入数据的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在共享内存的使用中,顾名思义,就是实现多个进程中使用同一个内存区域来实现数据的通信。这样就可以实现一个简单的客户端/服务器程序啦。
共享内存使用的函数有下面几个:

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值