自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(87)
  • 资源 (3)
  • 收藏
  • 关注

原创 c++11 实现设计一个多线程打印程序,第i个线程只打印i-1数字

#include <thread>#include <iostream>#include <mutex>#include <condition_variable>#include <vector>#include <functional>using namespace std;mutex print_mutex;condition_variable cond;string s = "";int flag = 0;

2022-03-09 22:12:57 1121

原创 基于select的回射服务器

server#include <sys/types.h>#include <sys/socket.h>#include <stdio.h>#include <netinet/in.h>#include <sys/time.h>#include <sys/ioctl.h>#include <unistd.h>#include <arpa/inet.h>#include <string.h&g

2022-01-17 21:37:45 660

原创 调试coredump程序

写一个产生coredump的程序#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int*p; p=nullptr; cout<<*p<<endl; return 0;}编译g++ -g -o coredump coredump.cpp运行发生段错误。找到core的日志ubuntu下core文件处理cwd@cw

2022-01-09 19:58:49 1175 1

原创 使用tcpdump观察tcp的三次握手,四次挥手,以及http的keep-alive机制

测试方法:服务器使用自己写的,架设在阿里云服务器上。打开两个终端,分别运行cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcpcwd@cwd:~$ sudo tcpdump src 116.62.35.197 and tcp测试一:使用postman发送有keep-alive标志的get请求一次,观察报文情况。测试结果:客户端发向服务器报文:cwd@cwd:~$ sudo tcpdump dst 116.62.35.197 and tcptc

2021-12-26 14:42:09 1706

原创 解决webbench运行时卡住的问题

问题描述:使用webbench进行压力测试的时候,在baidu上一般来说正常。在自己的webserver上测试,有时会卡住而没有返回值。在修改为长连接的时候尤其会发生。如下图必须要ctrl+c终止。github上也有这样的问题长连接问题 · Issue #31 · linyacool/WebServer解决思路:找到可能被卡住的地方测试时修改了部分源码进行打印,看每次1000个子进程中被阻塞了的进程数判断。1:代码健壮性增加:从while (s = Socket(host, port)

2021-12-23 22:06:25 946

原创 修改webbench支持长连接

概述我们知道HTTP协议采用“请求-应答”模式,当使用普通模式,即非KeepAlive模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议为无连接的协议);当使用Keep-Alive模式(又称持久连接、连接重用)时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。http 1.0中默认是关闭的,需要在http头加入"Connection: Keep-Alive",才能启用Keep-

2021-12-23 20:35:40 447

原创 webbench详解与源码注释

webbench总共就是三个文件,makefile,socket.c,webbench.cmakefile完成编译,sudo make install安装到 /usr/local/bin目录下面。其实 make install命令就是把可执行文件拷贝到/bin目录下面。INSTALL(1) User Commands INSTALL(1)NAME install - copy files and

2021-12-23 20:18:24 971

原创 linux中install/make install的时候发生了什么?

核心:install就是把可执行文件拷贝到bin目录下。参考man installINSTALL(1) User Commands INSTALL(1)NAME install - copy files and set attributesSYNOPSIS install [OPTION]... [-T] SOURCE DEST install [OPTION]...

2021-12-19 14:43:34 509

原创 基于c++11新特性的safe_call wapper

今天调试项目,进入了一个公司写的源代码去看,其中写了一个wapper层。核心代码如下:std::map<std::thread::id, std::exception> exceptions;std::map<std::thread::id, bool> exceptions_read;template<typename class_type, typename ret_type, typename ...arg_type>inline ret_type saf

2021-12-15 21:50:08 690

原创 python与c++程序通过mqtt通信

mqtt安装与基本测试#安装mosquitto mqtt#引入仓库sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa#更新源sudo apt-get update#安装mosquittosudo apt install mosquitto#安装客户端sudo apt-get install mosquitto-clients######测试#一个终端开启sub mqttmosquitto_sub -h localhost

2021-12-11 15:18:47 3060 1

原创 Linux--UIO机制

kernel解释前言对于许多类型的设备,创建 Linux 内核驱动程序是大材小用。真正需要的只是某种处理中断并提供对设备内存空间的访问的方法。控制设备的逻辑不一定必须在内核中,因为设备不需要利用内核提供的任何其他资源。像这样的一类常见设备是用于工业I / O卡。为了解决这种情况,设计了用户空间 I/O 系统 (UIO)。对于典型的工业I/O卡,只需要一个非常小的内核模块。驱动程序的主要部分将在用户空间中运行。这简化了开发,并降低了内核模块中出现严重错误的风险。请注意,UIO 不是通用驱动程序接口。已

2021-11-25 14:01:01 3134

原创 malloc分配内存的实现中brk和mmap的区别

malloc函数族: #include <stdlib.h> void *malloc(size_t size); void free(void *ptr); void *calloc(size_t nmemb, size_t size); void *realloc(void *ptr, size_t size); void *reallocarray(void *ptr, size_t nmemb, siz

2021-11-08 21:08:09 2373

原创 springboot-redis整合并使用fastjason作序裂化器,存取类对象

目的@SpringBootTestclass Springboot01ApplicationTests { @Autowired private RedisTemplate<Object,Object> redisTemplate; @Test public void redis() { RedisConnection connection = redisTemplate.getConnectionFactory().getConnecti

2021-10-30 11:03:31 550

原创 《Linux设备驱动程序》(第三版)的shortprint模块程序注释

/* * A version of the "short" driver which drives a parallel printer directly, * with a lot of simplifying assumptions. * * Copyright (C) 2001 Alessandro Rubini and Jonathan Corbet * Copyright (C) 2001 O'Reilly & Associates * * The source code i

2021-09-12 19:50:33 215

原创 隔离并绑定线程到cpu使内核线程独占cpu

隔离cpu1.运行htop,观察各个cpu负载情况:2.修改/etc/default/grubGRUB_CMDLINE_LINUX=“isolcpus=2”更新sudo update-grub重启3.htop查看负载分布[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nd1ad04M-1630635890292)(/home/imc/Pictures/htop2.png)]cpu的隔离没有问题。(上述两次htop运行在ethercat启动,ec_ep3e.k

2021-09-03 10:31:21 2067

原创 linux内核模块与用户程序共享内存

使用remap_pfn_range在内核层共享内存,完成mmp回调函数的编写。默认动态分配设备号,允许以命令行方式指定设备号使用cdev_add注册字符设备使用device_create创建设备文件"/dev/demo0","/dev/demo1"部分参考了这个博客编译模块#make#sudo insmod sharedmem.ko#cd /dev#ls有demo0,demo1测试程序编译#gcc user.c -o user切换到root用户#su root#./user.

2021-08-25 20:58:58 809

原创 linux 内核重要数据结构 file_operations、file、inode

标记化结构初始化方法内核中结构体的赋值常使用标准C的标记化结构初始化方法,这在之前的用户层代码并不常见。static struct file_operations fops ={ .owner = THIS_MODULE, .open = hello_dev_open, .release = hello_dev_release, .read = hello_dev_read, .write = hello_dev_writ

2021-08-25 11:28:39 548

原创 More Effective C++读书笔记

More Effective C++读书笔记基础议题条款1:区别指针与引用条款2:尽量使用C++风格的类型转换条款3:不要对数组使用多态条款4:非必要不提供默认构造函数操作符条款5:谨慎定义类型转换函数条款6:自增(increment)、自减(decrement)操作符前缀形式与后缀形式的区别条款7:不要重载”&&”, “||”,或”,”条款8:理解各种不同含义的new和delete异常条款9:使用析构函数防止资源泄漏条款10:在构造函数中防止资源泄漏条款11:禁止异常信息(exceptio

2021-07-09 17:40:00 336

原创 effective c++读书笔记

effective c++读书笔记一级目录二级目录三级目录Charpter 1. 让自己习惯C++条款01: 视C++为一个语言联邦条款02: 尽量以const,enum,inline替换#define条款03: 尽可能使用const条款04: 确定对象被使用前已先被初始化Charpter 2. 构造/析构/赋值运算条款05: 了解C++默默编写并调用哪些函数条款06: 若不想使用编译器自动生成的函数,就该明确拒绝条款07: 为多态基类声明virtual析构函数条款08: 别让异常逃离析构函数条款09: 绝

2021-06-29 11:43:45 261 2

原创 基于operator new重载的小型内存池

基于重载的小型内存池#include <cstddef>#include <iostream>using namespace std;//ref. C++Primer 3/e, p.765//per-class allocator class Screen {public: Screen(int x) : i(x) { }; int get() { return i; } void* operator new(size_t); voi

2021-06-08 10:12:51 232

原创 ::operator new/::operator delete的重载

::operator new/::operator delete是可以重载的。new delete是不可以重载的。他们的作用范围都是全命名空间,需要小心重载//----------------------------------------------------#include <cstdlib> //malloc, free#include <iostream> #include <complex>using namespace std;void* myA

2021-06-07 21:58:42 432

原创 c++ Startup

c++ Startup问题c++的进入点在哪里?–启动函数,但是可以被gcc设定什么代码比`main()更早被执行?–启动函数在main前面的函数什么代码在main()之后被执行?–析构那几个内存空间内存的heap结构如何?–空闲链表程序进入点c++进入点并不是main,在linux下可以由gcc的-e参数指定。可以认为在这个参数下,启动函数变成了我们自己写的blabla。而且main就根本不会被调用。$ cat entrypoint.c int blabla(){ printf("Ye

2021-06-06 20:12:27 726 2

原创 空struct的size

在看stl的源码分析的时候,仿函数是一个仅有函数的struct,这样的成员是否占用空间。理论上应该是0,侯捷老师说因为编译器实现的原因会是1。因为当时离现在比较久了,就测试一下#include <iostream>using namespace std;template <class Arg,class Result>struct my_unary_function{ typedef Arg arguement_type; typedef Result re

2021-06-03 20:37:42 237 1

原创 new/delete 与 operator new/delete详解

new有三种调用形式//throwing (1) void* operator new (std::size_t size);//nothrow (2) void* operator new (std::size_t size, const std::nothrow_t& nothrow_value) noexcept;//placement (3) void* operator new (std::size_t size, void* ptr) noexcept;(1) throw

2021-05-21 11:06:04 236

原创 利用shm_open的共享内存在无亲缘进程间通信例程

头文件定义储存在共享内存的结构体,以及一些宏定义#include <unistd.h>#include <stdint.h>struct shm_ect_data { /* struct stored in shared memory */ int32_t targetPosition; //电机的目标位置 int32_t targetVelocity; //电机当前运行速度 int8_t opModeSet; //电机运行模

2021-05-14 16:26:47 270

原创 Linux下使用信号处理,终端执行ctrl+c后的SIGINT信号

很多时候我们写的程序是一个一直运行的,调试的时候,我们直接按ctrl+c终止程序,那么在while后面的一些close函数的调用,在没有设置中断函数的时候,是不会被执行的。错误例子#include <iostream>#include <unistd.h>using namespace std;int main(){ while(1){ //sleep(1); } printf("closing\n");}编译运行,ct

2021-05-13 20:01:46 2441

原创 使用sendmsg/recvmsg在进程之间传递文件描述符

需要注意一点,传递一个文件描述符,并不是传递一个文件描述符的值,而是要在接收进程中创建一个新的文件描述符,并且该文件描述符和发送进程中被传递的文件描述符,指向同一个文件。例程#include <sys/socket.h>#include <fcntl.h>#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <assert.h>#include

2021-05-13 19:18:14 934

原创 基于共享内存和信号触发的聊天室服务器方案(包括多进程处理)

源码部分借鉴自游双的《Linux高性能服务器编程》完整源码参见github-chatroom1.全局配置client_data#define BUFFER_SIZE 64#define USER_LIMIT 5#define FD_LIMIT 65535#define MAX_EVENT_NUMBER 1024#define PROCESS_LIMIT 65535int sig_pipefd[2];bool stop_child = false; //子进程的标志位struct cl

2021-05-12 17:12:27 289

原创 关于epoll_create的size,以及创建出的句柄epollfd是否需要close探讨

sizeepoll_creat的函数圆形如下:int epoll_create(int size);其中,size的含义值得琢磨。首先参考官方给出的资料:gun库里的注释/* Creates an epoll instance. Returns an fd for the new instance. The "size" parameter is a hint specifying the number of file descriptors to be associated wit

2021-05-11 22:11:05 832

原创 基于poll的聊天室程序

源码部分借鉴自游双的《Linux高性能服务器编程》客户端#include <sys/socket.h>#include <sys/types.h>#include <fcntl.h>#include <unistd.h>#include <assert.h>#include<stdio.h>#include <stdlib.h>#include <netinet/in.h>#include &

2021-05-10 08:58:02 292 1

原创 epoll的ET模式和LT模式的例程与分析

例程来自游双的《Linux高性能服务器编程》#include <sys/socket.h>#include <sys/types.h>#include <sys/epoll.h>#include <fcntl.h>#include <unistd.h>#include <assert.h>#include<stdio.h>#include <stdlib.h>#include <neti

2021-05-06 19:12:59 156

原创 aio_read()的例程详解

man手册AIO(7) Linux Programmer's Manual AIO(7)NAME aio - POSIX asynchronous I/O overviewDESCRIPTION The POSIX asynchronous I/O (AIO) interface allows applications to ini‐ tiate one or more I/O

2021-05-05 21:59:36 1685

原创 syslog()的使用和例程

man手册命令行man openlog即可查看;写的非常详细,看完其实就懂了。NAME closelog, openlog, syslog, vsyslog - send messages to the system loggerSYNOPSIS #include <syslog.h> void openlog(const char *ident, int option, int facility); void syslog(in

2021-05-05 09:35:30 1577

原创 assert()指针的用法

非空指针,可以过assert#include <assert.h>#include <iostream>using namespace std;int main(int argc, char const *argv[]){ int *p; int a; p= &a; //p=nullptr; assert(p); cout<<"ok"<<endl;

2021-04-23 13:54:24 963

原创 c++迭代器的地址问题以及&*v.begin() 用法

看个项目用到这种用法,写了个测试程序测了一下。不能直接取迭代器的地址对迭代器加*,即获得该迭代器所指的元素对迭代器加*,再加&,就是该元素的地址#include <vector>#include <iostream>using namespace std;int main(int argc, char const *argv[]){ vector<int> v(10,0); //cout<<"&amp

2021-04-22 22:50:21 2041

原创 从sockaddr 中获得ip地址并打印

参考链接struct addrinfo *res; // populated elsewhere in your codestruct sockaddr_in *ipv4 = (struct sockaddr_in *)res->ai_addr;char ipAddress[INET_ADDRSTRLEN];inet_ntop(AF_INET, &(ipv4->sin_addr), ipAddress, INET_ADDRSTRLEN);printf("The IP ad

2021-04-14 20:49:45 4037

原创 c++手写线程池

#ifndef THREADPOOL_H#define THREADPOOL_H#include <mutex>#include <condition_variable>#include <queue>#include <thread>#include <functional>class ThreadPool {public: //explicit声明显示类构造函数 //make_shared 创建Pool以及其的

2021-04-10 14:20:54 473 1

原创 c++ Lambda表达式中捕获[a=b]的情况

https://blog.csdn.net/gongjianbo1992/article/details/105128849捕获列表中=表示值捕获,但是如果是[a=b]则应理解为,先执行a=b 的赋值,然后捕获a#include <iostream>using namespace std;int main(){ int a=10; int b=5; auto cwd=[a=b](){ int b=7; cout<&lt

2021-04-10 09:43:36 292

转载 C++11 中的std::function和std::bind

非原创,请参看原博文C++11 中的std::function和std::bind1. 可调用对象可调用对象有一下几种定义:是一个函数指针,参考 C++ 函数指针和函数类型;是一个具有operator()成员函数的类的对象;可被转换成函数指针的类对象;一个类成员函数指针;C++中可调用对象的虽然都有一个比较统一的操作形式,但是定义方法五花八门,这样就导致使用统一的方式保存可调用对象或者传递可调用对象时,会十分繁琐。C++11中提供了std::function和std::bind统一了可调用对

2021-04-09 16:16:36 61

原创 Epoll写的一个tcp回射服务器

运行环境:Linux/* include fig01 */#include "unp.h"#include <limits.h> /* for OPEN_MAX */#include <sys/epoll.h>#define INET_ADDRSTRLEN 16#define OPEN_MAX FOPEN_MAX#define NOTDEFintmain(int argc, char **argv){ int listenfd, connfd;

2021-04-09 08:21:50 118

设计模式源码带简略注释

设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

2020-04-08

crud_express.rar

使用node.js编写的具有增删改查功能的学生管理系统.使用了Express框架,art-template等依赖包,有package.json文件说明 压缩包中包括所有源码,html文件和js脚本。

2020-03-01

matlab源文件 gear.m

matlab原文件 版本为2019b MATLAB [1] 是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。 MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。 MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。

2019-12-10

空空如也

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

TA关注的人

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