自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【go语言应用一句话】切片的内存使用(1)

分析了两个相同引用的切片。在扩容前和扩容后是否还是相同的切片引用;append函数会默认自动扩容。

2024-03-06 16:39:35 188

原创 【云存储】shell脚本实现云存储 s3 v4签名,并上传文件到云存储

linux上用shell脚本实现亚马逊云存储协议的s3 v4签名,能实现文件上传到云储存。

2024-03-02 19:54:37 404

原创 [代码实战] c语言base64的编码与解码

c语言实现base64编码

2024-02-21 17:07:53 246 1

原创 [go语言应用一句话] 内存管理-变量逃逸及踩坑历程

go语言的变量逃逸使用和踩坑历程。

2024-02-20 10:22:53 297 1

原创 [go语言应用一句话] 官方的xml解析包encoding/xml使用

go语言解析xml的方式,使用起来的确简单且强大

2024-02-19 13:29:55 273 1

原创 [linux系统应用一句话] 字符集编码

这里设置的是终端的显示编码,如果文本数据是utf-8的,这里设置gb2312,则会显示乱码。文本数据是什么格式的,还要看编辑器是设置的什么。: 下图可以看出,文本里的字符顺序是123456,但hexdump在查看时的顺序是两个字交换的,这里在维护时需要注意。:如果你的数据是文本的,可以用vi编辑。编辑时用的什么编码是可以设置的。这里的修改不是永久的,只是对当前的vi实例有效。文本里的实际数据将以这里设置的编码类型进行编码。

2024-02-18 16:45:20 138 1

原创 [go语言应用一句话] segmentio/kafka-go应用的踩坑总结

go语言使用kafka踩坑历程

2024-02-18 09:53:34 264 1

原创 [代码实战] c语言基于openssl实现的AES算法ECB模式加密代码解读

调用 pkcs7_padding_add,这是填充函数。不管明文满不满足16字节的块大小,都需要进行填充。不是16的整数倍时,要填充补齐16字节。如果是16的整数倍,则需要填充一个整块。电码本模式将明文分为若干个大小相同的块,对每个块进行单独的加密。不同的块加密结果没有关联,每个块可以独立解密。ECB模式的优点是简单,缺点是会被重放攻击。代码中依赖openssl库使用AES的ECB(电码本)模式进行加密和解密。

2024-01-30 13:02:54 259

原创 【代码测试】先pthread_cond_signal, 后pthread_cond_wait,会阻塞

【代码测试】先pthread_cond_signal, 后pthread_cond_wait,会阻塞当无线程在pthread_cond_wait等待时, 发送pthread_cond_signal,啥都不会发生,pthread_cond_signal依旧返回0#include <pthread.h>#include <stdlib.h>#include <stdio.h>pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALI

2021-04-12 17:10:54 646

原创 C语言的curl库开发中的超时设置

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);curl_setopt($ch, CURLOPT_TIMEOUT, 100);例如下载一个mp3文件:CURLOPT_CONNECTTIMEOUT 设置10s,表示建链成功后如果10无响应将会断链。CURLOPT_TIMEOUT 设置为100s,表示如果这个mp3文件100秒还没下载完,就断链。参考:https://blog.csdn.net/andybegin/article/details/8734

2020-09-08 09:40:46 1226

原创 cmake链接的到底是动态库还是静态库

LINK_DIRECTORIES(${CMAKE_SOURCE_DIR}/libs)这个命令指定库文件的搜索路径。编译和运行中都有效。所有编出来的可执行文件依赖库可以放在这个目录下,减少对操作系统的目录依赖。但是要注意一点,这里的搜索路径最终是绝对路径,意思也就是编译时就确定了这个目录,运行时也要搞一个相同的路径目录来存放依赖库。TARGET_LINK_LIBRARIES(${LINK_TA...

2020-04-23 17:27:12 2478

原创 关于c库文件操作函数feof的几句话

1、feof在stdio.h中定义2、只有当文件读指针已处于文件结尾,且再次发送读时,feof才会返非03、所有要判断文件是否已到结尾,要先发生一次读,再判断feof的返回状态。char c;c = fgetc(fp);while(!feof(fp)){printf("%X/n", c); //处理完上次读的数据后 c = fgetc(fp); //再读一次,然后在while中判...

2020-01-10 09:24:55 161

原创 理解网络字节序(大端字节序)的几句话

1、在发送网络字节流时,从内存中由低地址向高地址依次取字节发送;2、在接收网络字节流时,从网络流中顺序读出字节,从内存低地址向高地址依次写入3、网络字节序使用的是大端(高位存低地址),网络流先发送的是高位,接收端先收到高位并被存入低地址,所以对于小端cpu,发送时要hton*(),接收后要ntoh*()4、为啥要分大小端?大多认为是cpu硬件设计的历史原因。计算都从低位开始,cpu为了高效计...

2020-01-09 11:20:20 1383

原创 ldconfig失败后大部分命令不能用

今天需要在centos系统上安装一个自己编译的应用程序,由于依赖的动态库太多,我用命令把所有依赖的动态库复制到一个目录下,拷贝到新的centos系统中。通过修改/etc/ld.so.conf来增加一个搜索路径,让后ldconfig使其生效。但是,就在执行完ldconfig后出错了,linux里的所有命令在执行时,都提示段错误,ls、ll、vi\vim、rm等都用不了了。由于系统内有大量资料,系统...

2019-12-30 19:06:42 2181 2

原创 代码片段笔记

#文件名提取#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)

2019-12-20 17:49:10 124

原创 使用gsoap开发webserver的客户端与服务端应用demo

最近项目开发使用到gsoap,在百度上搜索到的都是千篇一律的文章,没有一篇能准确全面的解释如何使用gsoap做客户端与服务端应用开发。最准确全面的文档当然是官方的用户开发手册:http://www.cs.fsu.edu/~engelen/soapdoc2.html#tth_sEc1.2百度了很多文章,最后还是官方手册解决了我的大部分疑问。再贴出客户端向服务端请求的简单小demo,这个dem...

2019-12-09 11:22:10 250

原创 从套接字句柄获取客户端ip:port

网络通信开发中,如果服务端想获取客户端ip,如果是tcp套接字,用getpeername函数(用法网上很多)。如果是udp套接字,只能从recvfrom函数的第三个参数struct sockaddr*中返回。最近犯的一个低级错误,想用getpeername获取udp客户端ip,获取出来的始终不对打印:client ip =39.127.0.0, port=55569因为这个函数根本就没执行...

2019-12-06 17:14:16 821

原创 coturn的relayed addr地址端口分配策略

1、turn的RELAYED-ADDRESS端口号分配都在文件turn_ports.c中实现。_turnports是关键的结构体类型:struct _turnports { u64bits status[PORTS_SIZE]; u64bits low; u64bits high; u16bits range_start; u16bits range_stop; int...

2019-11-18 16:53:41 581

原创 安装mysql数据库时的一顿操作

记录最近按照mysql的一顿操作。安装包:mysql-8.0.18-linux-x86_64-minimal.tar下载地址:https://dev.mysql.com/downloads/mysql/https://dev.mysql.com/downloads/file/?id=490304详细步骤:解压:tar -xvf mysql-8.0.18-linux-x86_64-mi...

2019-11-15 15:52:42 93

原创 [nginx]用try_files实现优先用本地资源服务,找不到该资源则跳转到回源缓存流程

一、try_file命令介绍1、先看一下try_files命令处于nginx处理11个阶段的位置:typedef enum { NGX_HTTP_POST_READ_PHASE = 0, //读取请求头 NGX_HTTP_SERVER_REWRITE_PHASE, //执行rewrite NGX_HTTP_FIND_CONFIG_PHASE, //根据...

2019-10-17 11:01:42 750

shell脚本实现云存储 s3 v4签名,并上传文件到云存储

1、脚本是linux上的shell脚本。实现云存储的s3协议v4签名上传文件到云存。 2、适用于云存储的开发过程中,作为一个调试工具,来验证接口和参数是否正确,在shell脚本中修改调试参数,灵活方便。也可用于搭建轻量级的应用环境。 3、我的测试环境是centos7,脚本依赖的命令都是centos系统自带的命令,不需要额外安装依赖工具。 主要依赖命令: (1)sha256sum; (2)openssl;(3)curl;(4)stat,取文件大小 4、s3 v4签名通过http接口进行通信,使用了对http的请求行、请求头、请求体、时间戳,使用了多次、复杂的摘要算法。比s3 v2签名更安全,v2签名校验的参数很少。 5、有些云存储厂家不会同时支持s3 v2 和 v4签名,据说v2和v4在服务侧不好同时实现,调试前需要确认对方支持的是哪种签名。

2024-03-02

linux中,用shell脚本检查磁盘使用率并清理文件

内容概要: 1、shell脚本检查磁盘的使用率。根据挂载的目录路径去查找磁盘,并获取使用率参数。 目录路径可以列表的形式,配置多个。 2、如果磁盘的使用率超过设定的阈值,则会进入清理流程。 3、清理流程分两种情况清理:(1)如果要清理的文件被其他程序打开了,并仍在不停的写入,这种文件不能直接rm,因为即使rm删了看到的文件,但那个进程仍然持有该文件的描述符,仍有写入的权限,文件占用的磁盘不会被释放。一般这种情况用 echo -n “” > file的方式去覆盖。这样会释放磁盘空间,但会遗留一个空白文件。(2)另一种情况是该文件以长时间没有写操作,没有其他进程以写的方式在打开它,可以直接删除,以rm的方式清理。 4、上述两种情况分别以两个shell函数实现,有入参,可任意调节入参。 5、这两个函数的第一个参数是文件列表,可以以shell数组变量来传递,数组的每个元素支持文件路径,支持正则表达式去匹配。 6、因为脚本要删除文件,为了方便调试,脚本有调试模式的全局变量控制开关:debug_mode。调试模式下,不会删除清理文件,只会输出日志,用于核对脚本执行的目标对象是否正确。

2024-02-10

c/c++用一个源文件,一个头文件实现的 优先队列定时器 源码,包含测试代码,可运行

c/c++用一个源文件,一个头文件实现的 优先队列定时器 源码,包含测试代码,可运行。 说明: 1、源码中包含三个文件qtimer.cpp、qtimer.h、test_main.cpp; 2、qtimer.cpp中会创建一个优先队列来管理定时任务,一个set来管理分配出去的定时器id,一个定时器的work线程; 3、队列有加锁保护,是线程安全的; 4、定时器添加一次只会执行一次,要循环执行,需要在回调函数里再次添加; 5、添加定时器函数成功后会返回创建的定时器对象的id; 6、可以通过该id来取消循环执行的定时器; 7、添加定时任务时传递的用户数据,会在内部被拷贝, 由timermanager服务释放; 8、调用q_remove_timer只会移除指定定时器,调用q_timer_release会释放上下文和所有定时任务; 9、定时任务时间到了后,会由内部线程来执行回调函数; 如果有什么问题,请私信留言。

2024-01-29

c/c++用一个源文件,一个头文件实现的线程池源码,包含测试代码,可运行

c/c++用一个源文件,一个头文件实现的线程池源码,包含测试代码,可运行。 说明: 1、线程池初始化时,会起多个独立线程作为线程池的work进程; 2、可修改线程池的work线程数量,需要简单修改下接口即可; 3、可设置线程的cpu亲和性绑核,就是cpu在线程调度时,会让该线程优先调度到亲和性高的cpu内核上; 4、任务加入任务队列,工作线程从任务队列里取任务执行; 5、任务队列有锁机制,是线程安全的; 6、代码是c++的,但可在以c的方式调用; 7、只依赖标准基础库和pthread库; 8、开放两个接口,调用简单;如果线程池的工作参数需要需改,可以在初始化接口里进行适当的修改,比如可配置线程池工作线程的数量;工作线程的数量建议设置到和cpu的核数一样。 9、编码方式: g++ -std=c++11 -o test test.c cppThreadWorkers.cpp -I./ -lpthread test.c:测试的c文件; cppThreadWorkers.cpp: 线程池源文件 cppThreadWorkers.h: 线程池的头文件 如果有什么问题,请私信留言。

2024-01-27

空空如也

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

TA关注的人

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