自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 收藏
  • 关注

原创 怎么利用gtest和gmock进行单元测试

1.软件安装这里笔者选择的是 googletest-release-1.5.0 这个版本,去github上下载即可。下载完解压后,利用cmake生成makefile文件,再执行makecmake CMakeLists.txtmake会在当前目录下生成两个.a文件 libgtest.a libgtest_main.a,将这两个文件放置于系统环境下sudo cp libgtest*.a /usr/libsudo cp –a include/gtest /usr/include2.DEMO测试

2022-03-12 22:13:26 501

原创 windows下类似与Linux下readv和writev的实现

struct iovec{ void *iov_base; /* Pointer to data. */ size_t iov_len; /* Length of data. */}; /*实现类似于writev功能*/ static long sendv(int socket , struct iovec *iov , int count) { long totallen ,tlen = -1; while(count) { t.

2022-02-18 14:23:37 1171

原创 服务器搭建muduo环境遇到的问题

在服务器安装cmake时提示报错The current CMakeCache.txt directory /home/zjx/CMake-2.8.11/CMakeCache.txt is different than the directory /home/zjx/cmake/CMake-2.8.11 where CMakeCache.txt was created出现错误是因为,有可能是因为先利用apt-get获取cmake失败导致的。解决办法是,把解压出来的安装包 CMake-2.8.11 文.

2022-02-09 18:01:39 633

原创 muduo学习

.github里面书写了作者的联系方式,以及编译muduo项目需要预安装的开源库(包括 cmake boost redis ?).contrib用到的其他开源组件的基本接口实现如hiredis 包括 数据库连接 执行命令等基本接口如thrift 不知道干啥用的?.examples存放一些开源组件的执行脚本? 没太理解.muduomuduo核心内容.patches补丁?...

2022-02-08 16:50:32 640 1

原创 LINUX下域名解析

写一个域名解析的demo#include <stdio.h>#include <iostream>#include <netdb.h>#include <sys/socket.h>#include <errno.h>#include <arpa/inet.h>int main(){ struct hostent *host; char *p1 = (char *)"vs1.video.ge.chinamobile.c

2022-01-14 10:18:07 829

原创 LINUX共享内存的创建与使用

1.操作系统APIshm为前缀 为 shared memory创建共享内存段或者使用已创建的共享内存段( shmget())将进程附加到已经创建的内存段中(shmat())从已连接的共享内存段分离进程(shmdt())对共享内存段执行控制操作(shmctl())头文件#include <sys/ipc.h>#include <sys/shm.h>//函数原型1.int shmget(key_t key, size_t size, int shmflg)//输入参

2022-01-13 11:27:55 1808

原创 LINUX下信号量的使用

首先通过man可以查看Linux下的信号量函数// Linux信号量API函数// int sem_init(sem_t *sem, int pshared, unsigned int value);// int sem_destroy(sem_t *sem);// int sem_post(sem_t *sem);// int sem_wait(sem_t *sem);// int sem_trywait(sem_t *sem); // int sem_timedwait(sem_t *se

2021-11-25 16:18:18 1298

原创 创建线程时的常见错误

不知道大家有没有遇到过一个经典报错error: invalid conversion from ‘void (*)()’ to ‘void* (*)(void*)’ [-fpermissive] pthread_create(&id,NULL,Test,NULL);比如你自定义了一个线程函数 void Test(){}随后将这个函数作为传参调用pthread_create进行线程创建 pthread_t id ; pthread_create(&i

2021-11-24 15:14:16 1626

原创 一个有意思的小demo

tcp和udp的区别在哪里?首先在建立socket的时候,利用SOCK_STREAM和SOCK_DGRAM创建两种不同的socke描述符,一种叫流套接字,一种叫数据报套接字。tcp建立连接的过程,首先是服务端创建socket套接字,随后调用bind函数绑定监听的ip和端口,调用listen开启监听,调用accept接收客户端的连接,通过接收到的文件描述符与客户端进行通信。udp是一种无连接的协议,首先是服务端创建套接字,随后利用bind绑定端口和ip,随后便可调用sendto和recvfrom与客户端

2021-11-22 15:43:29 1238

原创 Dynamic Programming

动态规划相关名词阶段状态无后效性决策策略允许策略集合中达到最优效果的策略称为最优策略把K阶段的状态叫做 x(k) ,把这个阶段的决策叫做u(k),那么k阶段的状态和决策u(k)一旦确定,那么下个阶段k+1的状态 x(k+1)也就确定了,那么有下面的x(k+1)=Tk(x(k),u(k))这是从k阶段到k+1阶段的状态转移规律,称为状态转移方程。最优化原理:作为整个过程的最优策略,它满足:相对前面决策所形成的状态而言,余下的子策略必然构成“最优子策略” 。最优性原理实际上是要求问题的最

2021-11-09 20:58:47 65

原创 简单的快速排序(附详细注释)

static bool AscendingOrder(vector<int>& num,int start,int end) { int flag = start; //移动的???? int value = num[start]; //flag标记值 int tstart = start; //暂存开始 用来递归 int tend = end; //暂存结束 用来递归 static int count = 1; //用来打印递归次数 cout <&l

2021-11-09 00:07:47 161

原创 异步打印日志类的实现

需求:实现一个类,要求这个类能实现日志的异步打印,打印信息包含时间,文件名,行号,进程号以及用户的打印信息。这个需求里面的技术点。1.异步的实现,肯定需要利用到线程?2.文件名行号的获取?3.怎么实现类似于printf的格式化输出的效果?针对第一个问题,利用stl标准库里面的std::thread,结合std::mutex(共享锁)和std::condition_variable(条件变量)来实现。这个类里面需要定义一个list类,list于vector类似,但是实现是基于双向链表的。在工作线程

2021-10-12 20:26:33 680

原创 基于epoll的网络服务端模型

#include <stdio.h>#include <iostream> //std#include <string.h>#include <errno.h> //perror 打印一些错误信息#include <sys/socket.h>#include <arpa/inet.h>#include <netinet/in.h>#include <arpa/inet.h>#include &

2021-09-29 15:51:21 88

原创 基于poll的网络服务端模型

先说一下,poll和select没有太本质的区别,1.使用poll时,会造成大量的fd的数组在用户态和内核态之间被赋值复制2.与select函数一样,poll也是去遍历fd集合来获取就绪的fd,这样在fd较多时会造成性能的下降(像网络上连接数量较多的情况,这里建议了解epoll)。3.监视的fd可能活跃的数量比较少,也会导致性能下降。再来说一说poll的函数原型int poll(struct pollfd *fds, nfds_t nfds, int timeout);fds:指向一个结构体数

2021-09-27 19:50:07 107

原创 栈破坏检测

在C/C++语言中,由于代码书写人员能够直接通过指针来操作内存的内容,在通常的时候没有可靠的方法来防止对数组的越界访问读写操作。但是,我们可以在发生了越界访问的时候,在没有造成任何有害结果之前,尝试检测到他。找保护机制是在栈帧中任何局部缓冲区与栈状态之间存储一个特殊的“金丝雀值”,也称为“哨兵值”。用以下代码来验证gcc编译时默认带有栈溢出检测机制。#include <string.h>#include <stdio.h>char *gets(char *s){

2021-09-15 16:06:08 407

原创 关于条件运算符的应用扩展

?:这个运算符我们平时可能有这样使用int temp = 0 ;bool a = false;temp = (a) ? 30 : 40; //通常来说a是一个表达式,这里为了简单最后的运算的结果是,temp = 40;当然如果 a = true 的话,temp = 30那么下面这种又是什么意思呢? bool a = false; bool b = false; int temp = -1 ; a ? b ? temp = 0 :temp = 1 : temp = 2; cout &lt

2021-09-13 20:51:31 59

原创 用gdb调试C和C++ core文件的堆栈信息显示

在程序允许崩溃后,会生成core文件,通过core文件和对应的可执行文件以及其链接的库文件,可以通过gdb解析出程序崩溃最后的堆栈信息,但是这些信息显示时,不一定是程序运行到当前栈帧位置时变量就是那样的,有可能是经过后面的运行才变成栈帧看到的样子的。以下面一个小demo验证一下#include <stdio.h>#include <iostream>using namespace std;class Myclass {public: Myclass() { my_err

2021-09-13 11:35:35 1021 1

原创 大-杂-烩

计算机网络在利用网络socket进行通信时,选择tcp协议进行交互,利用send函数进行数据发送,我们都知道send函数的返回结果为0时代表对端关闭了连接,那么如果发送0字节数据时是不是也会返回0?这样会不会有歧义呢?答:调用send函数发送0字节数据时,send(,0,) 第三个参数代表发送的字节数,本端的操作系统的协议栈并不会把数据发送出去(这里可以通过tcpdump截包佐证只有tcp建链的包,后续没有任何数据包),但是返回的结果依然是0,所以这里确实是会有一点歧义。对于接收端而言,并不会有任何响

2021-07-20 22:17:43 295 2

原创 一个简单的TCP客户端

1.目录结构->include //存放.h头文件->source //存放.cpp源文件->out //存放可执行文件->makefile //一键执行2.源码2.1 Client.h#ifndef _Client_H_#define _Client_H_#define INVALID_SOCKET -1#define MAX_IP_ADDR_LENTH 32#define MAX_PORT_LENTH 8#define MAX_REV_BUFF_SI

2021-07-19 21:40:56 200 1

原创 一个简单的TCP服务端

1.目录结构->include //存放.h->source //存放.cpp->out //存放可执行文件makefile //一键快速编译2.所包含的文件2.1 main.cpp#include <stdio.h>#include "main.h"#include "Server.h"#include <iostream> //std#include <unistd.h> //sleep#include

2021-07-19 21:37:31 100

原创 常用工具软件

1.文本比较工具beyond compare //可进行文本比较 文件夹比较2.git插件tortoiseGit //小乌龟,检查git提交记录 进行提交比较等…3.文本查看工具notpad++

2021-07-19 15:26:39 473 2

原创 Windows平台的TCP服务端客户端

实现基于TCP的服务端与客户端//TestTcpServer.h#include "winsock2.h" //引用头文件#pragma comment (lib,"ws2_32.lib") //链接库文件#include<Windows.h>#include "Server.h"#include <iostream>#define MAX_TCP_BUF_LEN 1024#define TCP_SERVER_PORT 10500#define IP_ADDR "1

2021-06-08 22:14:38 427 1

原创 googleprotubuf使用小结

googleprotubuf使用小结主要针对最近了解的的开源组件googleprotubuf的简单使用,写一个简单小结。1.安装protobuf$ wget https://github.com/protocolbuffers/protobuf/releases/download/v2.6.1/protobuf-2.6.1.tar.gz$ tar -xvf protobuf-2.6.1.tar.gz$ cd protobuf-2.6.1$ ./configure$ make -j82.编写.

2021-01-14 20:53:10 344

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除