自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++之std::string的resize与reverse

在C++中我们经常用std::string 来保存字符串,其中有两个比较常用但是却平时容易被搞混的两个函数,分别是resize和reserve,模糊意识里,这两个方法都是对std::string的容量或元素进行操作,那么这两个函数到底做了什么呢?先声明string中的两个概念,capaticy(容量)和size(大小)

2023-11-06 17:25:35 920

原创 一个简单的C语言链表增删改查的例子,带有锁

【代码】一个简单的C语言链表增删改查的例子,带有锁。

2023-08-10 16:21:59 135

原创 网络编程中的SO_REUSEADDR和SO_REUSEPORT参数详解

linux kernel 3.9 引入了最新的SO_REUSEPORT选项,使得多进程或者多线程创建多个绑定同一个ip:port的监听socket,提高服务器的接收链接的并发能力,程序的扩展性更好;此时需要设置SO_REUSEPORT(注意所有进程都要设置才生效)。(3)只有effective-user-id相同的服务器进程才能监听同一ip:port (安全性考虑)(1)避免了应用层多线程或者进程监听同一ip:port的“惊群效应”。

2023-02-22 13:54:25 691

原创 Linux管道默认无法阻塞问题排查记录

【代码】Linux管道默认无法阻塞问题排查记录。

2023-02-16 17:25:47 211

原创 tcp的粘包拆包及其解决方式

假设客户端向服务端连续发送了两个数据包,用 packet1 和 packet2 来表示,那么服务端收到的数据可以分为三种,现列举如下第一种:服务端正常接收到这两个数据包 package1 和 package2,即没有发生拆包和粘包第二种:接收端只接收到一个包,由于tcp不会出现丢包的现象。所以这一个数据包中包含了发送端发送的两个数据包的信息,这种现象即为粘包。这种情况由于接收端不知道这两个数据包的界限,所以对于接收端来说很难处理。

2023-02-15 14:01:55 160

转载 POSIX 消息队列与 System V 消息队列 区别 小记

【代码】POSIX 消息队列与 System V 消息队列 区别 小记。

2022-11-21 14:31:24 392

原创 getopt 和 getopt_long 基本用法【MAN GETOPT_LONG】

【代码】getopt 和 getopt_long 基本用法【MAN GETOPT_LONG】

2022-11-17 16:52:23 204

原创 errno设置后的生存周期小记

errno is thread-local; setting it in one thread does not affect its value in any other thread.(线程安全,不用担心被打断后,errno被其他线程修改)

2022-11-11 15:47:45 170

原创 局部变量作用域

全局变量,在函数内定义的变量是局部变量,而在函数之外定义的变量称为外部变量,外部变量是全局变量,是在函数的外部定义的,它的作用域为从变量定义处开始,到本程序文件的末尾。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量。用static来声明静态局部变量,局部变量的值在函数结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上次函数调用结束时的值。局部变量是指在函数内部定义的变量 ,作用域为定义局部变量的函数,也就是说他只能在定义他的函数中使用,最值得注意的是。

2022-11-08 13:42:36 201

原创 Linux CoreDump 生成设置

linux系统生成core文件设置方法

2022-07-21 15:35:11 634

原创 IP路由原理——技术详解

路由转发数据过程其实很简单,简单的总结就是:路由接收数据包→查看目的地址→与路由表进行匹配找到转发端口→转发到该端口具体路由器工作过程:1)、PC1要给PC2发送数据,因为地址不在同一个网段,PC1会将数据包发送给本网段的网关路由R1的G0/1接口,2)、R1路由器接收到数据包,查看数据包IP头部中目的地址是2.100,再查询自己路由表,发现到达192.168.2.0/24网段需要从G0/0接口出去,于是R1路由器将数据包发送到G0/0接口,并由此接口将数据发出去到达R2路由器。3)、R2路由器收到一个来自

2022-07-10 17:06:48 4008

原创 一文读懂TCP/IP组包发包全过程

应用层:HTTP协议是生成针对目标WEB服务器的HTTP请求报文,该报文就是需要传递的数据HTTP协议使用的是TCP协议,为了方便通信,将HTTP请求报文按序号分为多个报文段(segment),并对每个报文段进行封装。PC1使用本地一个大于1024以上的随机TCP源端口(这里假设是1030)建立到目的服务器TCP80号端口的连接,TCP源端口和目的端口加入到报文段中,学名叫协议数据单元(Protoco............

2022-07-06 15:25:29 2659

原创 SendFile to Socket or File

sendfile, file to file, file to socket

2022-06-07 14:59:54 100

原创 top命令详解(转载学习)

本文转载来源:https://www.jianshu.com/p/8a6754f919c5 感谢作者@道无虚1、top命令简介top命令是动态查看进程变化,监控linux的系统状况;它是常用的性能分析工具,能够实时显示系统资源各个进程占用状况,类是windows的任务管理器。1.1 语法[root@localhost ~]# top -h procps-ng version 3.3.10Usage: top -hv | -bcHiOSs -d secs -n max -u|U user -

2022-04-15 11:04:32 2761

转载 [译] Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测(2020)

本文参考:https://arthurchiao.art/blog/intro-to-io-uring-zh/ ,复制在此只为学习时方便,以防原文丢失!译者序本文组合翻译了以下两篇文章的干货部分,作为 io_uring 相关的入门参考:How io_uring and eBPF Will Revolutionize Programming in Linux, ScyllaDB, 2020An Introduction to the io_uring Asynchronous I/O Framewor

2022-04-06 13:48:34 569

转载 memmove/memcpy/memmcpy的区别和示例

**memcpy和memmove()**都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);他们的作用是一样的,唯一的区别是,当内存发生局部重叠的时候,memmove保证拷贝的结果是正确的,memcpy不保证拷贝的结果的正确。第一种情况

2022-03-31 10:35:57 261

转载 linux下网络程序遭遇SIGPIPE的解决(转)

问题描述:我的一个服务器程序, 在Windows下运行正常.但当在Linux(centos 6.3)下,进行对端未开启的异常测试时,出现莫名退出 . 最后跟踪到是write调用导致退出. 用gdb执行程序, 退出时提示"Broken pipe".问题分析:对一个对端已经关闭的socket调用两次write, 第二次将会生成SIGPIPE信号, 该信号默认结束进程.具体的分析可以结合TCP的”四次握手”关闭. TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对

2022-03-30 14:54:03 919

转载 c++11多线程之 std::future std::promise std::packet_task std::async 简述及基本使用

先说明一点:std::asyanc是std::future的高级封装, 一般我们不会直接使用std::futrue,而是使用对std::future的高级封装std::async。 下面分别说一下。一、std::async基本用法std::future可以从异步任务中获取结果,一般与std::async配合使用,std::async用于创建异步任务,实际上就是创建一个线程执行相应任务。std::async就是异步编程的高级封装,封装了std::future的操作,基本上可以代替std::thread

2021-11-11 19:09:14 443

原创 vscode自定义编译器

项目需要使用交叉编译器高版本,手动增加交叉编译器10.2确定cmake-tools-kits.json位置locate cmake-tools-kits.json编辑配置文件vi /home/coco/.local/share/CMakeTools/cmake-tools-kits.json增加新的编译器路径[{“name”: “GCC 10.2 aarch64-linux-gnu”,“compilers”: {“C”: “/home/coco/cross_com

2021-11-04 10:43:16 1427

原创 Sqlite3插入速度比较(sqlite3_exec/sqlite3_prepare)

最近做到的项目涉及一个大数据量缓存重传,其中要用到的sqlite技术,把自己的学习心得整理了一下。SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中。同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite数据库由于其简单、灵活、轻量、开源,已经被越来越多的被应用到中小型应用中。因此在许多软件中例如(QQ,微信)

2021-10-20 15:29:12 2896

原创 TcpServer之select/poll/epoll优缺点及服务端示例代码

一、selectselect函数原理select系统调用是用来让我们的程序监视多个文件句柄的状态变化的。程序会停在select这⾥里等待,直到被监视的文件句柄有一个或多个发⽣生了状态改变。关于文件句柄,其实就是⼀一个整数,我们最熟悉的句柄是0、1、2三个,0是标准输入,1是标准输出,2是标准错误输出。0、1、2是整数表示的,对应的FILE *结构的表示就是stdin、stdout、stderr。1.我们通常需要额外定义一个数组来保存需要监视的文件描述符,并将其他没有保存描述符的位置初始化为一个特定值,

2021-09-09 19:50:19 1155

原创 CMakeLists.txt简单使用之实战

CMakeLists.txt编写简述以下为必须选项:CMAKE_MINIMUM_REQUIRED (VERSION 3.5)set(TARGET_NAME HelloWorld)1. include pathINCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/inc)#PROJECT_SOURCE_DIR 最顶层cmakelist位置2. source code pathAUX_SOURCE_DIRECTORY(${PROJECT_SOURCE_DIR}/sr

2021-09-08 20:39:57 602

转载 TCP Status

网上很多大佬整理TCP三次握手、四次挥手,看到过很多人写,但其实从运维角度来说,我们分析 TCP 链接状态的时候,首先是用netstat或ss来查看。之后才会根据 TCP 状态的情况进行抓包分析,进一步确认一些问题,所以我们首先看到的会是 TCP 的状态,那么就需要很清楚的了解 TCP 的11种状态代表着什么。TCP 的11种状态分别对应 TCP 三次握手过程的5种状态和TCP四次挥手断开过程中的6种状态。如上图,就是11种状态,在整个TCP建立连接和断开连接的整个过程。下面用 tcpd

2021-08-26 19:20:26 357

转载 socket通信简述

对TCP/IP、UDP、Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵。那么我想问:1.什么是TCP/IP、UDP?2.Socket在哪里呢?3.Socket是什么呢?4.你会使用它们吗?什么是TCP/IP、UDP?TCP/IP(Transmission Control Protocol/Internet Protocol)即传输控制协议/网间协议,是一个工业标准的协议集,...

2021-08-26 18:44:39 10590

空空如也

空空如也

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

TA关注的人

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