自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux 系统调用机制简介

在linux应用编程中,经常会用到 open、read、write、socket、poll、select......诸多的系统调用函数;那这些系统调用函数的执行机制是怎么一回事呢,下面就做一个简要的说明。

2023-06-17 22:36:25 278

原创 linux下多线程获取互斥锁,多线程运行时机

如果多个线程试图执行这一代码块(一个临界区),事实上只有一个线程能够持有该互斥量(其他线程将遭到阻塞),即同时只有一个线程能够进入这段代码区域,

2022-09-01 22:54:07 415 1

转载 TLS中ChangeCipherSpec为什么是个单独的协议类型【转】

是TLS1.2及之前的协议设计的冗余消息,目的是从协议上避免实现时的流水线停顿问题。参考OpenSSL再曝CCS注入漏洞。

2022-08-29 23:21:53 1673

转载 tls1.3【转载】

该文档定义了TLS(Transport Layer Security)协议的1.3版本。TLS可以让C/S应用在互联网上通过一种能抵御信息泄露、破坏或篡改的方式安全通信。该文档更新了RFC 5705和6066,废弃了RFC 5077、5246、6961。也对TLS1.2的实现做了些新的规定。TLS的首要目标在两个通信端点之间提供一个安全通道;对底层传输通道的唯一要求就是传输可靠、没有乱序。可鉴别:server端总是可被鉴别,client端可选被鉴别。...

2022-08-29 23:18:42 1848

转载 TLS 1.0 至 1.3 握手流程详解【转】

TLS 全称为 Transport Layer Security(传输层安全),其前身是 SSL,全称为 Secure Sockets Layer(安全套接字层),它的作用是为上层的应用协议提供安全的通信,比如众所周知的 HTTP + TLS = HTTPS。SSL 2.0 是该协议的第一个公开发布的版本,由于其存在的安全问题很快被升级到了 SSL 3.0,并且在 1999 年,IETF 小组将该协议标准化,因此 TLS 1.0 诞生了。...

2022-08-29 23:12:54 4458

转载 c语言支持yaml配置文件通用方法

在go语言中使用viper之类的库很方便的处理yaml配置文件,但是在c语言中就比较麻烦,经过一番思索和借助强大的github,发现了一个libyaml c库,但是网上的例子都比较麻烦,而且比较繁琐,就想法作了一个相对比较容易配置的解析应用,可以简单地类似viper 的模式进行配置实现不同的配置文件读取。如你的配置文件很复杂请按格式修改KeyValue 全局变量,欢迎大家一起完善库请自行下载 GitHub - yaml/libyaml: Canonical source repository for Lib

2022-07-12 23:05:14 604

转载 使用C语言和libcyaml库解析yaml配置文件

C语言的yaml库有 libyaml 和 libcyaml (The Official YAML Web Site)个人觉得libcyaml比较好用,libcyaml项目地址:GitHub - tlsa/libcyaml: C library for reading and writing YAML.libcyaml编译没有难度,按照说明编译即可,需要注意的是提前安装libyaml-dev:sudo apt install libyaml-dev下面直接上例子:~/test -include

2022-07-12 23:01:26 1135

原创 git和svn的区别

svn是集中式版本控制系统;git是分布式版本控制系统。svn就是所有人修改的都是服务器上的程序,如果有人修改了同样的部分,那就冲突了。所以呢,一般团队会约定,对于公共部分的程序,尽量标注出开发人员特有标识,又或者A从上添加,B从下添加。git就是开发人员创建自己的分支,这个分支就相当于将源码copy一份在本机上,之后修改的都是本地的代码,可随时拉取服务器的代码进行同步,git可创建无数分支,开发人员只需将自己修改的代码提交就可以了,这样冲突的几率会小很...

2022-04-11 09:36:14 427

转载 Linux时间函数总结

Linux时间函数time()、ctime()、ctime_r()、localtime()、localtime_r()、asctime()、strftime()的转换关系_半夜摘星星的博客-CSDN博客上面这个图就是它们所有函数的关系转换,比较清晰,不需要太多文字描述。下面是它们的代码实现过程:#include<stdio.h>#include<unistd.h>#include<time.h>#include<error.h>#

2022-04-10 18:22:21 823

原创 VM虚拟机启动,提示内存错误

在 控制面板-性能和维护-管理工具-服务 中找到你要启动和停止服务,右击启动或以管理员身份运行,启动VM相关的服务即可

2022-02-20 10:12:10 1261

原创 MSG_OOB MSG_PEEK

本文章向大家介绍一个例子说明 MSG_OOB MSG_PEEK MSG_DONTWAIT,主要包括一个例子说明 MSG_OOB MSG_PEEK MSG_DONTWAIT使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。此类数据通过信号SIGURG 来通知,所以需要使用 signal / sigaction 来注册一个信号处理函数, 在signal 之前首先需要 fcntl(clientfd,F_SETOWN,getpid()) ,由于此信号是由套接字产生的,

2022-02-19 12:26:08 1205

原创 Source Insight乱码解决方案

【原因】:SI不支持UTF-8字符编码乱码最近使用source insight查看一些开源代码,显示中文就乱码,因为source insight不支持utf-8编码,默认编码方式为ANSI码。所以需要将utf-8等非ANSI码的文件转换成source insight默认支持的ANSI码格式才能显示中文不乱码。【问题】用Source Insight打开一个C文件,其中包含中文在SI中显示的是乱码【解决过程】1、在notePad++看这个文件,是UTF-8编码的2、想办法让其正.

2022-02-11 22:52:46 10242

转载 C/C++开源项目【转】

推荐值得学习的优秀C/C++开源项目 - Geek0ne | 极客时空 | 极客IT技术栈.开源是一种文化,开源是一种精神,开源是一种态度.开源软件极大的促进了世界IT领域的趋势和发展,这种情况随处可得,比如开源服务器系统`Linux`,数据库`Redis`,Web开发`PHP`,高性能服务器`Nginx`,移动操作系统`Android`,虚拟容器技术`Docker`,人工智能`TensorFlow`等......https://geek0ne.com/C-Cpp/Projects.html...

2022-02-10 07:00:43 117

原创 有限状态机

#if 0【状态机】1、什么是状态机2、有限状态机3、状态机的2中类型4、状态机的主要用途5、状态机解决了什么问题6、C语言实现状态机实例1、什么是状态机 状态机最初应用在数字电路设计领域,适合描述有先后顺序或者有逻辑规律的事情; 状态机的本质:对有逻辑顺序,或时序规律事件的一种描述方法; 状态机通过响应一系列事件而运行;当到达终态,状态机停止运行。 即:事务的状态在某事件的触发下,从其中的一个状态切换到另一个状态,直到到达终态。2、有限状态机...

2021-12-24 22:12:50 1187

原创 linux 动态库(.so)、静态库编译命令与调用(.a);

1、Linux-C动态库与静态库的编译与调用2、linux 缺少动态连接库.so--cannot open shared object file: No such file or directoryhttps://www.cnblogs.com/youxin/p/5116243.html方法二生效;或者 将生成的库文件,拷贝到 /usr/lib目录生效; (拷贝到 /usr/local/lib 目录、设置 /etc/ld.so.conf 文件均未生效)...

2021-12-23 21:23:48 219

转载 Linux--信号

如下博客对信号总结的xianghttps://blog.csdn.net/weixin_44627813/article/details/115607180?spm=1001.2014.3001.5501

2021-12-17 07:40:12 61

原创 原码、反码、补码

原码,反码,补码的产生过程,就是为了解决,计算机做减法和引入符号位(正号和负号)的问题。1、整数在计算机中的表示。在计算机中,整数采用补码表示。当前主流编译器中整型在内存中占用四个字节,共32位。2、原码、补码、补码。原码:第一位为符号位,其余位表示数值,如-1的原码:1,000...0001(两个1之间32个0)。反码:正数的反码就是其原码;负数的反码为符号位不变,数值位按位取反。如-1的补码为1,111...1110...

2021-11-05 21:49:33 2320

转载 图解加、解密算法 、数字签名、数字证书

目录1、什么是加密2、加密算法的分类2.1、对称加密2.2、非对称加密3、数字签名和加密4、数字证书5、基于数字证书发送文件过程1、什么是加密加密就是对明文数据按某种特殊算法进行处理,使其成为不可读的一段代码,通常称为“密文“,密文通过”密钥“解密后还原出原来的明文,通过这样的途径可以达到保护数据不被非法人窃取、阅读的目的。那来看个题,考虑以下哪些属于加密方法:AES、RSA、MD5、BASE64、SM4这几种都是日常开发中常用的数据编码技术,但是只有 ..

2021-09-25 07:33:48 2019

原创 文件IO、标准IO的区别及其效率

系统IO:Unix/Linux下的系统文件IO,即文件访问机制不经过操作系统内核的缓存,数据直接在磁盘和应用程序地址空间进行传输。标准IO:带缓存的IO,又称为标准IO(C标准库中提供了标准IO库,即stdio),它实现了跨平台的用户缓存解决方案。文件IO 和 标准IO的概念【文件I/O】文件I/O是操作系统封装了一系列open、close、write、read等API函数构成的一套用来读、写文件的接口供应用程序使用,通过这些接口可以实现对文件的读写操作,但是效率并不是最...

2021-09-05 18:02:28 5549

原创 linux中 select() 函数的第一个参数为什么是监听的最大描述符加1呢

select() 函数原型: /* According to POSIX.1-2001 */ #include <sys/select.h> /* According to earlier standards */ #include <sys/time.h> #include <sys/types.h> #include <unistd.h> int se

2021-09-05 16:41:41 1150

原创 对从外部获取的“IP地址或者域名”进行校验,避免命令注入

【问题:】因IP地址或 域名的参数是通过配置文件获取的,且当client连接broker异常时,需要通过system()系统调用来执行ping IP操作,将结果记录在日志中;但是system()函数如果执行的命令被异常修改,可能会导致系统异常。所以为了解决外部来的数据被system()执行时恶意修改,即避免命令注入,需要对从外部获取的参数进行校验。【解法方法:】IP地址或 域名的参数是通过配置文件获取,获取后对其进行校验:1)如果是IP地址,则使用 inet_aton()进行校验; 2)如.

2021-09-04 22:05:39 369

原创 什么是命令注入,命令注入如何避免?

1、什么是命令注入Command Injection,即命令注入攻击,是指由于嵌入式应用程序或者 web应用程序对用户提交的数据过滤不严格,导致黑客可以通过构造特殊命令字符串的方式,将数据提交至应用程序中,并利用该方式执行外部程序或系统命令实施攻击,非法获取数据或者网络资源等。在命令注入的漏洞中,最为常见的是PHP的命令注入。PHP命令注入攻击存在的主要原因是Web应用程序员在应用PHP语言中一些具有命令执行功能的函数时,对用户提交的数据内容没有进行严格的过滤就带入函...

2021-08-13 23:13:27 15752 1

原创 2021-06-27 linux 内核双链表接口函数

2021-06-27 17:06:40 89

原创 嵌入式 软件架构浅谈

一个好的软件框架,对于后续业务功能扩展开发、问题分析定位、功能维护都有着 “卓越” 的优点,为什么这么说呢?且听下面分析:1、程序架构清晰明了、

2021-06-10 23:40:57 217 2

转载 C语言字节对齐、位域、枚举、联合体

转载:https://blog.csdn.net/weixin_44627813/article/details/110352439

2021-06-10 23:17:04 62

转载 Linux--进程初识、fork函数、进程状态转换

总结的好,学习下,有空敲敲代码。https://blog.csdn.net/weixin_44627813/article/details/114547383

2021-06-10 23:14:23 60

原创 整数、字符存储,以及柔性数组的使用

1、如何将数据传递给 FuncHandle(int event, void *inParam, int inParamSize) 类型的数据?为什么要使用 void *类型接收传入参数,you

2021-06-10 22:49:27 154

原创 C语言如何打印可变参数的?

#include <stdio.h>#include <stdarg.h> // 可变参数头文件/*【C语言如何在可变参数函数中使用printf?】应使用v*系列的函数来实现。对比下printf与vprintf函数原型:void printf(const char *format, ...);void vprintf(const char *format, va_list ap);可以看出二者的差别。vprintf才接收va_list类型,printf接收的是不.

2021-06-02 22:42:24 832

原创 教练式领导

教练式领导总的来说就是用提问来引导下属,独立解决遇到的难题,这样可以提升下属处理问题的能力。教练式领导的方法简单实用,简称GROW方法,主要分为4步:1、你的目标是什么?2、你的现状是什么?3、你有什么好的解决方案?4、你下一步准备做什么?这个方法可以用在任何问题上,能帮助自己迅速厘清思路,快速有效的解决问题。最好准备一张纸,按照这个步骤边想边写。作者:Johnfeng漫步链接:https://www.jianshu.com/p/bbf88562c50b来源:简书著作权归

2021-05-31 22:50:32 677

原创 linux C 线程池

1. 总结理解线程池的是什么?线程池就好比水龙头的水流入一个较大的水池,当需要水的时候,5个人挑着扁担,每个人同时可以去打10桶水(各自打各自的2通水,互不影响),然后挑着就走。如果没有水池,那么每个人都需要在从水龙头上接自己的2桶水,谁先到水就先打水,这样打水的效率极低,5个人都需要排队打10桶水。所以:线程池,顾名思义就是由多个线程组成的“水池”,当有任务需要执行时,由空闲线程进行处理,若没有任务,则线程处于休眠等待的状态。什么时候需要创建线程池呢?(为什么要使用线程池?)如果一个应

2021-04-25 23:35:45 979

转载 IO多路复用之select总结

IO多路复用之select总结1、基本概念  IO多路复用是指内核一旦发现进程指定的一个或者多个IO条件准备读取,它就通知该进程。IO多路复用适用如下场合:  (1)当客户处理多个描述字时(一般是交互式输入和网络套接口),必须使用I/O复用。  (2)当一个客户同时处理多个套接口时,而这种情况是可能的,但很少出现。  (3)如果一个TCP服务器既要处理监听套接口,又要处理已连接套接口,一般也要用到I/O复用。  (4)如果一个服务器即要处理TCP,又要处理UDP,一般要使用I/O复用

2021-04-20 23:36:52 145

转载 select()和accept()区别、socket编程:服务器如何判断是否有客户端发起链接请求

参考:https://blog.csdn.net/lsgqjh/article/details/65629609select:查看指定fd_set中socket状态,如果fd_set中有套接字准备就绪(触发(读、写或执行)),则会返回,返回值为触发的套接字个数accept:经过创建套接字socket()绑定bind()以及listen()之后,将监听socket和客户端socket建立一个全新连接,并返回client的socket信息;判断是否有客户端发起链接请求, 一般用select(),.

2021-04-20 23:21:40 1466

原创 fopen 用ab+打开,读、写文件时,指针在哪里

【问题】打开文件都是向文件添加数据,就是以a+方式打开,用ftell函数直接得到当前位置,如果不为0,则说明文件不为空;但调试发现打开文件后用ftell函数得到的当前位置值为零?ab+表示以二进制方式打开,数据写入时在原内容后追加;打开后指针在文件头部(所以 ftell() 获取的当前文件中已写入的数据长度为0);但是fwrite的时候会判断打开模式,如果是ab+则移动到文件尾再写入ftell() 功能:获取当前读写位置偏离文件头部的字节数.总结:1)用fopen函数打开文件时,文件指针

2021-04-02 21:22:08 7559

转载 linux 内核链表与双向链表的应用区别

一、链表1.常用的链表结构特点:每个链表的节点就是一个数据结构struct common_fox { unsigned long tail_length; //尾巴长度 unsigned long weight; //重量 bool is_fantastic; //这只动物奇妙吗? struct common_fox *next; struct common_fox *prev;};2.linux内核的链表结构...

2021-03-28 10:23:44 581

原创 双链表中对数据进行 “增-删-查-改“ 操作

双链表中对数据进行 "增删查改" 操作代码博文:http://data.biancheng.net/view/167.html#include <stdio.h>#include <stdlib.h>typedef struct line { struct line *prior; int data; struct line *next;} line;//双链表的创建line *initLine(line *head);//双链表插

2021-03-28 09:39:34 102

原创 单链表中数据元素的“增-删-查-改“实现

参考博文:http://data.biancheng.net/view/161.html对链表中数据元素做"增删查改"的操作实例代码如下:#include <stdio.h>#include <stdlib.h>typedef struct Link { int elem; struct Link *next;} link;link *initLink();//链表插入的函数,p是链表,elem是插入的结点的数据域,add是插入的位置lin

2021-03-27 22:11:34 368

原创 遍历某目录找到文件修改时间最老的文件

实现功能:打开某目录,查找该目录下文件的修改时间最老的那个文件;代码如下:#include <sys/types.h>#include <sys/stat.h>#include <time.h>#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <dirent.h>#include <string.h&gt.

2021-03-27 13:58:16 669

原创 linux coredump 问题总结

什么是coredump 为什么会coredump coredump 出现的原因 如何定位分析coredump 如何解决coredump问题 参考博文:__stack_chk_fail 栈溢出问题定位; https://blog.csdn.net/pcj_888/article/details/111305718

2021-03-05 16:18:23 207

转载 c语言NULL和0区别及NULL详解

转载出处:https://www.cnblogs.com/lvdongjie/p/6340184.html先看下面一段代码输出什么:#include<stdo.h>int main(){ int *p=NULL; printf("%s",p); }输出<null> ,单步调试可以看出执行int *p=NULL,p的值为0x00000000,可以看出,NULL在实际底层调用中就是0,在C语言中,NULL和0的值都是一样的,但是为了目的和用途及.

2021-02-22 22:12:20 4330

原创 linux 改变GCC编译器的字节对齐方式

linux C 字节对其简介在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然对界(alignment)条件分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。 例如,下面的结构各成员空间分配情况: struct test { ch...

2020-09-24 23:49:58 4012 1

空空如也

空空如也

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

TA关注的人

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