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:缓冲区
什么是缓冲区 一个缓冲区对象是固定数量的数据的容器,其作用是一个存储器,或者分段运输区,在这里数据可被存储并在之后用于检索.缓冲区像前篇文章讨论的那样被写满和释放,对于每个非布尔原始数据类型都有一个缓 ...
随机推荐
- Pyinstaller通过spec文件打包py程序(多个py脚本)
Pyinstaller pyinstaller是python的一个第三方模块,使用它可以将python程序打包为可执行文件,实现打包后的程序在没有python环境的机器上也可以运行.pyinstall ...
- 2. python提示:TypeError: unhashable type: 'list'
原因是,python字典的key不支持list类型和dict类型,需要转换 错误时 将list类型强制转换成string,用"".join(list). 修改后:
- Shell 截取字符串方法
原文链接 方法1 "${varible##*string}" 从左向右截取最后一个string后的字符串 e.g. exampleString="abc//888//ab ...
- 学习笔记----C语言的面向对象
2020-03-26 21:27:17 面向对象的编程语言都有一个类的概念,像Java.python等.类是对特定数据的特定操作的集合体.它包含两个范畴:数据和操作.C语言是没有类的概念的,但是 ...
- Linux下反弹shell笔记
0x00 NC命令详解 在介绍如何反弹shell之前,先了解相关知识要点. nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 —u 则 ...
- 文本编辑器之kindeditor
摘要:最近在自己学习搭建网站的时候,突然要搭建网站的时候发现了一个好东西,那就是kindeditor这个文本编辑器,这个编辑器简单好用,而且很小,并且是开源的. 文本编辑器介绍 KindEditor ...
- javascript异步上传图片文件
html: <form action="url" enctype="multipart/form-data" id="myform" ...
- hdu1908 逆序对
题目链接:https://www.luogu.com.cn/problem/P1908 这个题不要以为拿到手就可以树状数组秒,本题的数据范围是1e9显然简单的树状数组是空间不够的,点个数有5e5,所以 ...
- hdu2732 最大流+拆点
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2732 题目给定一个场景,有n*m个方格,每个方格代表一个柱子,一个柱子可以承受不同次数的跳跃,开始时图 ...
- Hook集合----SSDTHook(x86 Win7)
最近在学习Ring0层Hook的一些知识点,很久就写完SSDTHook的代码了,但是一直没有整理成笔记,最近有时间也就整理整理. 介绍: SSDTHook 实质是利用Ntoskrnl.exe 中全局导 ...