c++缓冲区 vBufferChar.hpp
//vbuffer_char.hpp
//vov
#ifndef V_BUFFER_CHAR_HPP
#define V_BUFFER_CHAR_HPP
#include <iostream>
#include <vector>
#include <cstring>
#define BUFFER_CAPACITY (16000)
class vBufferChar
{
std::vector<char> buffer_;
int data_size_;
public:
vBufferChar();
vBufferChar(int size);
~vBufferChar();
int read(char* data,int size);
void write(const char* data,int size);
//get size of storge data
int size();
//get size of buffer
int capacity();
private:
//copy constructor
vBufferChar(const vBufferChar& t) {}
//assignment constructor
vBufferChar& operator=(const vBufferChar& t) {}
int GetFromBeg(char* data,int size);
void DelFromBeg(int size);
void AddFromEnd(const char* data,int size);
};
//public
vBufferChar::vBufferChar() {
buffer_=std::vector<char>(BUFFER_CAPACITY,0);
data_size_=0;
}
vBufferChar::vBufferChar(int size) {
buffer_=std::vector<char>((size>0)?size:BUFFER_CAPACITY,0);
data_size_=0;
}
vBufferChar::~vBufferChar() {
}
int vBufferChar::size() {
return data_size_;
}
int vBufferChar::capacity() {
return buffer_.size();
}
int vBufferChar::read(char* data,int size) {
if(!data || size<=0) {
return 0;
}
int read_size=GetFromBeg(data,size);
if(read_size>0) {
DelFromBeg(read_size);
}
return read_size;
}
void vBufferChar::write(const char* data,int size) {
if(!data || size<=0) {
return;
}
if(size <=(buffer_.size()-data_size_)) {
AddFromEnd(data,size);
return;
}
if(size>=buffer_.size()) {
std::cout<<"[vBufferChar]write:loss data-1:"<<data_size_+(size-buffer_.size())<<std::endl;
DelFromBeg(data_size_);
AddFromEnd(data+(size-buffer_.size()),buffer_.size());
return;
}
if((size>(buffer_.size()-data_size_)) && (size <buffer_.size())) {
std::cout<<"[vBufferChar]write:loss data-2:"<<size-(buffer_.size()-data_size_)<<std::endl;
DelFromBeg(size-(buffer_.size()-data_size_));
AddFromEnd(data,size);
return;
}
}
//private
int vBufferChar::GetFromBeg(char* data,int size) {
if(size<=0) {
return 0;
}
int size_can_read=(size<data_size_)?size:data_size_;
memcpy(data,buffer_.data(),size_can_read);
return size_can_read;
}
void vBufferChar::DelFromBeg(int size) {
if(size<=0) {
return;
}
int size_delete=(size<data_size_)?size:data_size_;
data_size_-=size_delete;
memcpy(buffer_.data(),buffer_.data()+size_delete,data_size_);
return;
}
void vBufferChar::AddFromEnd(const char* data,int size) {
if(size<=0||size>(buffer_.size()-data_size_)) {
return;
}
memcpy(buffer_.data()+data_size_,data,size);
data_size_+=size;
}
#endif
c++缓冲区 vBufferChar.hpp的更多相关文章
- boost 循环缓冲区
boost 循环缓冲区 #include <boost/circular_buffer.hpp> int _tmain(int argc, _TCHAR* argv[]) { boost: ...
- scanf()中清除输入缓冲区的几种方法归纳
应用场景:我们使用多个scanf()的时候,如果输入缓冲区还有数据的话,那么scanf()就不会询问用户输入,而是直接就将输入缓冲区的内容拿出来用了,这就导致了前面的错误影响到后面的内容,为了隔离这种 ...
- php缓冲区详解
什么是缓冲区(buffer)? 简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料. 其实缓冲区最 ...
- 缓冲区溢出利用——捕获eip的傻瓜式指南
[译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who can't smash ...
- SEED信息安全实验系列:缓冲区溢出漏洞实验
缓冲区溢出漏洞实验 本课程详细出自http://www.shiyanlou.com/courses/231,转载请注明出处. 一.实验描述 缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情 ...
- Apache service named reported the following error(OS 10055)由于系统缓冲区空间不足或队列已满解决办法?
apache启动失败报错: The Apache service named reported the following error:>>> AH00451: no listeni ...
- c/c++ 缓冲区的刷新
利用string 对象查看缓冲区的变化,因为每个string对象在输入时会以空格作为分界. #include<iostream> #include<string> using ...
- PHP的输出缓冲区(转)
什么是缓冲区?简单而言,缓冲区的作用就是,把输入或者输出的内容先放进内存,而不显示或者读取.至于为什么要有缓冲区,这是一个很广泛的问题,如果有兴趣,可以在网山找下资料.其实缓冲区最本质的作用就是,协调 ...
- Java NIO2:缓冲区
什么是缓冲区 一个缓冲区对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索.缓冲区像前篇文章讨论的那样被写满和释放,对于每个非布尔原始数据类型都有一个缓 ...
随机推荐
- 在Linux环境安装redis步骤,且设置开机自动启动redis
最近在linux环境安装了redis学习,目前已经安装成功且设置开机即启动状态,我把步骤流程记录了下来,分享给需要的小伙伴. 1.我在/usr/local/localsoftware/目录下创建了一个 ...
- 网络安全从入门到精通(第二章-3)后端基础SQL— MySQL高级查询与子查询
本文内容: MySQL的基础查询语句 链接查询 联合查询 子查询 渗透测试常用函数 1,MySQL基础查询语句: select * from 表 order by ASC/DESC; ASC:从小到 ...
- Swift 4.0 数组(Array)学习
定义数组常量(常量只有读操作) let array1: [Int] = [11, 55, 5] let array2 = [11, 55, 5] 定义数组变量 var array: [Int] = [ ...
- 利用Docker手动构建WebLogic镜像的步骤
info 我的Docker环境信息如下: [root@localhost ~]# docker info -f " OSType: {{.OperatingSystem}} {{.Archi ...
- CERN Root与CLING
CERN Root on Arch Linux For WSL: 一个CLI才是本体的程序居然有图形启动界面,莫名的微妙感 接触到Root是在一个4chan上喷matlab的thread里.某anon ...
- 单调栈-Maximum Width Ramp
2020-01-23 19:39:26 问题描述: 问题求解: public int maxWidthRamp(int[] A) { Stack<Integer> stack = new ...
- intern()方法的使用
intern() intern方法的作用是:如果字符串常量池中已经包含一个字符串等于此String对象的字符串,则返回常量池中的这个String对应的对象, 否则将其添加到常量池并返回常量池中的引用. ...
- 如何使用WordPress搭建网站
1.空间的申请 阿里用户可以申请[阿里共享虚拟主机普惠版6元/年],虽然配置和空间不高,但也可以做个小站点的.当不满足当前配置的时候,随时可以进行升级,所以拿来练手还是比较合适的. 2.WordP ...
- deepin 系统 ssh,samba,redis,取消开机密码等相关配置
ssh安装 sudo apt-get install openssh-server service ssh start ssh root 用户登入配置 安装完毕,运行命令"sudo vi / ...
- .NET Core技术研究-配置读取
升级ASP.NET Core后,配置的读取是第一个要明确的技术.原先的App.Config.Web.Config.自定义Config在ASP.NET Core中如何正常使用.有必要好好总结整理一下,相 ...