本文主要是介绍基于多反应堆的高并发服务器【C/C++/Reactor】(中)Buffer的创建和销毁,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
TcpConnection:封装的就是建立连接之后得到的用于通信的文件描述符,然后基于这个文件描述符,在发送数据的时候,需要把数据先写入到一块内存里边,然后再把这块内存里边的数据发送给客户端,除了发送数据,剩下的就是接收数据。接收数据,把收到的数据先存储到一块内存里边。也就意味着,无论是发送数据还是接收数据,都需要一块内存。并且这块内存是需要使用者自己去创建的。所以就可以把这块内存做封装成Buffer。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>学习笔记>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1.文件描述符与数据发送:
- 在发送数据时,需要先将数据写入内存缓冲区(buffer)。
- 内存缓冲区可以通过封装成一个Buffer结构体来实现
- Buffer结构体中包含一个指向内存的指针(data)、内存总大小(capacity)、读数据位置(readPos)和写数据位置(writePos)等成员
2.Buffer结构体及其成员说明:
- 指针:指向内存地址(data)
- 总大小:内存块的字节数(capacity)
- 读位置:当前读取数据的位置(readPos)
- 写位置:当前写入数据的位置(writePos)
3.Buffer API函数:
- 提供一系列API函数,以便对buffer中的内存进行操作
- 主要操作包括初始化buffer和进行读写操作
4.初始化Buffer:
- 需要为buffer申请指定大小的堆内存
- 使用malloc函数申请堆内存,并将内存地址返回给调用者
- 初始化buffer结构体中的成员,包括data指针、容量、读位置和写位置
- data指针需要指向一个有效的内存块,因此需要再次申请内存
- 使用memset函数将data指针指向的内存块初始化为零
- 返回buffer指针给调用者
>>>>>>>>>>>>>>>>>>>>>>>>>>>>Buffer的创建和销毁>>>>>>>>>>>>>>>>>>>>>>>>>>>>
- Buffer.h
struct Buffer {// 指向内存的指针char* data;int capacity;int readPos;int writePos;
}
(一)Buffer的初始化
// 初始化
struct Buffer* bufferInit(int size);
// 初始化
struct Buffer* bufferInit(int size) {struct Buffer* buffer = (struct Buffer*)malloc(sizeof(struct Buffer));if(buffer!=NULL) {buffer->data = (char*)malloc(sizeof(char) * size);buffer->capacity = size;buffer->readPos = buffer->writePos = 0;memset(buffer->data, 0, size);}return buffer;
}
(二)Buffer的销毁
// 销毁
void bufferDestroy(struct Buffer* buf);
// 销毁
void bufferDestroy(struct Buffer* buf) {if(buf!=NULL) {if(buf->data!=NULL) { // buf->data指向有效的堆内存free(buf->data); // 释放}}free(buf);
}
这篇关于基于多反应堆的高并发服务器【C/C++/Reactor】(中)Buffer的创建和销毁的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!