![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C语言
一只青木呀
life,just smile
展开
-
逻辑右移与算术右移
逻辑右移与算术右移原创 2022-06-10 08:16:46 · 14212 阅读 · 0 评论 -
cJSON库的解析与使用(字符串的封装与解析带详细demo)
cJSON库的解析与使用1、JSON格式简介1.1、cjson数据结构形式1.2、cjson语法规则1.3、cjson的数据类型2、cJSON核心结构体3、封装JSON格式3.1、创建一个对象,并向这个对象里添加字符串和整型键值:3.2、创建一个数组,并向数组添加一个字符串和一个数字3.3、 对象里面包括一个数组,数组里面包括对象,对象里面再添加一个字符串和一个数字4、解析json得到数据4.1、解析流程4.2、解析没有父节点的4.3、解析object4.4、解析数组4.5、解析数组中带对象1、JSON格原创 2021-03-17 17:06:38 · 1235 阅读 · 1 评论 -
C标准时间与时间戳的相互转换
话不多说,直接上代码;#include <stdio.h>#include <string.h>#include <time.h>#include <stdlib.h>/*标准时间转换为时间戳*/int standard_to_stamp(char *str_time){ struct tm stm; int iY,iM,iD,iH,iMin,iS; memset(&stm,0,sizeof(stm)); iY = atoi(s原创 2021-03-16 17:49:03 · 1805 阅读 · 4 评论 -
串口编程--C语言串口读取数据
串口编程1、通讯流程2、demo1、通讯流程①、打开串口②、设置波特率③、设置奇偶校验位、停止位、数据位等④、读写数据⑤、关闭串口2、demo本示例串口文件根据自己实际情况打开,方可读写成功,需要注意#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/types.h> #include <s原创 2020-12-02 09:23:25 · 10696 阅读 · 5 评论 -
什么是指针?为什么要用指针?
1、什么是指针?在C语言中,访问变量的方式有两种:1、通过变量名访问(例如说去什么花店,以花店的名称找到对应的花店)2、通过地址访问(通过花店的地址,导航过去)地址是什么呢?就是花店具体的路径xxxx路xxx号,在C语言中用指针来表示(0x12345678)所以说 指针=地址在C语言中整型变量存放的是整数字符变量存放的是字符那么指针变量存放的就是地址那么指针变量就可以说是存放指针的变量也可以说是存放地址的变量2、为什么要用指针?看下面一段代码#include <stdio原创 2020-11-06 12:33:14 · 7164 阅读 · 7 评论 -
1024程序员节
1024节日快乐首先纪念一下今天的日子: 202010年10月24日。建立CSDN博文一年了,写了有180多篇博文,在程序员的学习之路中有疑惑有不解,但一直坚持下来了,并且越学越迷茫,越学越觉得自己所知甚少。在学习的路上遇到了很多的良师益友,一直陪伴着自己一起学习!很幸福!很满足!希望在以后的嵌入式之路上有所成就,成为传说中的大佬。 哈哈我会继续努力提升自己!!!加油 少年用最简朴的方式记录下这个节日吧:#include<stdio.h>int main(void){原创 2020-10-24 14:30:52 · 477 阅读 · 1 评论 -
thumb conditional instruction should be in IT block -- `addcs r5,r5,#65536‘
对于 thumb conditional instruction should be in IT block – `addcs r5,r5,#65536’ 错误的解决办法错误形式解决办法在编译 .c文件的语句中加上“-Wa,-mimplicit-it=thumb”例如我这里是makefile中:问题解决,希望对大家有帮助...原创 2020-09-30 12:09:13 · 1125 阅读 · 1 评论 -
/libgcc/config/arm/lib1funcs.S:1331:对‘raise’未定义的引用
对于/libgcc/config/arm/lib1funcs.S:1331:对‘raise’未定义的引用 问题的解决办法:在函数‘__aeabi_ldiv0’的文件的结尾出添加一个空函数:/*定义raise函数 防止报错*/void raise(int sig_nr){ }问题解决,希望对大家有帮助...原创 2020-09-30 11:37:16 · 640 阅读 · 0 评论 -
string.h中常用字符串操作函数说明(strstr,strtok,strrchr,strcat,strcmp,strcpy,strerror,strspn,strchr等)
string.h概念函数详解memchrmemcmpmemcpymemmovememsetstrcatstrchrstrcmpstrcollstrcpystrcspnstrerrorstrlenstrncatstrncmpstrncpystrpbrkstrrchrstrspnstrstrstrtokstrxfrm概念C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。string .h 头文件定义了一个变量类型、一个宏和各种操作字符数组的函数。使用时都需要加上头文件string.h函数详原创 2020-09-19 13:57:48 · 946 阅读 · 0 评论 -
什么是回调函数精讲
这个问题一直很模糊,知道遇见了博主的文章才让我恍然大悟。参考博文:博文地址:https://blog.csdn.net/yilovexing/article/details/93192484回调函数通俗易懂的例子你到一个商店买东西,刚好你要的东西没有货,于是你在店员那里留下了你的电话,过了几天店里有货了,店员就打了你的电话,然后你接到电话后就到店里去取了货。在这个例子里,你的电话号码就叫回调函数,你把电话留给店员就叫登记回调函数,店里后来有货了叫做 触发回调事件,店员给你打电话叫做 调用回调函原创 2020-09-19 10:27:59 · 316 阅读 · 1 评论 -
C语言五大排序(桶排序,冒泡排序,选择排序,插入排序,快速排序)动态演示
C语言排序排序的目的桶排序概念思路排序的目的排序: 把无序变成有序桶排序概念桶排序 (Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。思路准备桶的时候,桶的大小是原来排序数组中最大元素的值加原创 2020-09-09 20:18:43 · 1370 阅读 · 0 评论 -
如何做web的访问控制机制(ACL)?
ACL含义对于一个服务器来说,我们不能让随随便便一个IP都可以访问我们的服务器,我们需要控制其访问的IP例子加入我们只能让C类段网络访问我们的服务器,那么我们就要对其进行访问控制我们让C类段网络IP(192.168.1.1)与其掩码(255.255.255.0)做一个按位与,和访问的IP与这个掩码也做一个按位与的操作,其结果相同我们才能让其访问。具体实现int access_ornot(const char *destip) // 0 -> not 1 -> ok{ //192.原创 2020-08-28 20:49:50 · 1189 阅读 · 0 评论 -
C语言如何解析配置文件?
一般服务器都是通过配置文件的解析获取关键的参数,不能够老是通过执行命令传进来,那么就有了配置文件,有了配置文件,就需要做配置文件的解析。一般C语言格式配置文件的格式:#config.ini #the web is daemon or notdaemon = yes #port set http=8000https=4444 #default certifileca= cert.pem#show dir or notdir= yes #dossl or notdossl=原创 2020-08-28 17:37:39 · 1412 阅读 · 0 评论 -
HTTPS简介以及SSL协议详解
这里写目录标题1.HTTPS简介2.SSL协议介绍2.1、SSL协议的功能2.2、SSL协议在协议栈的位置2.3、SSL协议组成2.3.1、纪录协议的功能2.3.2、SSL记录协议的示意图:2.3.3、SSL协议封装过程2.3.4、SSL协议解封装过程2.3.5、SSL握手协议2.3.5.1、全流程握手全流程握手详解Client helloServer helloServer CertificateClient Certificate RequstServer Hello doneClient Certif原创 2020-08-24 22:51:27 · 1462 阅读 · 0 评论 -
HTTP高效解析方法之协议状态机
协议状态机协议状态机原理平时我们解析单个的URL的时候,都是一个线程从头解析到尾,一个线程完成了所有的事情,协议状态机就是把这一件事情分成很多份,分发给更多的线程去解决,这样当并发量很大的时候就能很好快速的处理,完美解决了高并发的问题。协议状态机的每一步都存在输出和跳转,下面我们以一个正确的解析方式来分析一下协议状态机判断方法:判断HTTP协议的第一个字母是G P每个状态机都有一个跳转条件和输出结果确定方法; 确定当前状态,根据状态的类型,跳转到不同方法的处理状态每一步处理完之后,我们都会原创 2020-08-24 18:22:30 · 1892 阅读 · 0 评论 -
HTTP高效解析的方法之哈希加速
哈希加速在我们获取到HTTP的外部请求的时候,第一步去识别它所对应的请求类型,然后再去获取它后面所对的URL,最后在对URL做进一步的解析。在我们获取到了URL之后,我们需要在数据库中或者文件系统中获取对应的文件(也就是字符串匹配),但是解析过程中字符串的比较很慢,达不到我们的需求,那么我们就需要加快URL的解析,那么如何操作呢?我们可以使用哈希加速哈希加速:把服务器自己所对应的url全部通过哈希算法,把每一个路径都算成一个数,然后把输入的URL也进行哈希算法,算成一个数,和服务器的进行比较,如果在服原创 2020-08-24 17:34:21 · 1651 阅读 · 0 评论 -
Linux之ARM(IMX6U)裸机按键输入实验(GPIO的输出与输入)
Linux之ARM(MX6U)裸机按键输入实验(GPIO读取)1、按键输入简介2、硬件原理图分析3、实验程序的编写3.1、bsp_gpio.h3.2、bsp_gpio.c3.3、gpio_key.h3.4、gpio_key.c3.5、main.c4、编译下载验证4.1、连接脚本的编写4.2、Makefile的编写4.3、编译下载前面几篇文章试验都是讲解如何使用 I.MX6U 的 GPIO 输出控制功能, I.MX6U 的 IO 不仅能作为输出,而且也可以作为输入。 I.MX6U-ALPHA 开发板上有一个原创 2020-08-17 21:43:37 · 1489 阅读 · 0 评论 -
Linux--线程信号详解及demo分析
线程信号每个线程可以向其他线程发送信号 pthread_kill每个信号都有信号屏蔽集合同进程下所有线程共享对某信号的处理方法线程信号发送 int pthread_kill(pthread_t thread, int sig);参数:pthread_t thread:线程IDint sig:信号值,Linux中的32个信号线程的信号屏蔽集合:int pthread_sigmask(int how, const sigset_t *set, sigset_t *oldset);参原创 2020-08-13 14:19:40 · 405 阅读 · 5 评论 -
Linux--多线程之读写锁的使用以及demo
读写锁如果当前线程读数据 则允许其他线程进行读操作 但不允许写操作如果当前线程写数据 则其他线程的读写都不允许操作*在mutex的基础上 区分了 读锁定 和写锁定如果某线程申请了读锁定 其他线程依旧可以申请读锁 不能申请写锁定如果某线程申请了写锁定 则其他线程不能申请读锁定 也不能申请写锁定读写锁对象的创建pthread_rwlock_t rwlock;读写锁相关函数函数描述int pthread_rwlock_destroy(pthread_rwlock_原创 2020-08-13 13:49:19 · 560 阅读 · 0 评论 -
Linux--多线程之如何使用条件变量
Linux--多线程之如何使用条件变量条件变量初始化方法:条件变量等待条件变量通知demo运行效果条件变量条件变量的使用是为了让CPU节省资源,避免空转。条件达成线程才开始运行,不进行无用的等待。注意:条件变量要配合互斥体进行操作对象:pthread_cond_t condtion ;条件变量相关函数:函数描述int pthread_cond_destroy(pthread_cond_t *cond);销毁条件变量int pthread_cond原创 2020-08-13 13:34:36 · 603 阅读 · 0 评论 -
Linux 多线程编程以及demo
Linux 多线程编程以及demo1.线程的概念从用户空间资源来看:从内核空间资源来看:2.线程的管理1.如何编译2.如何获取线程id(tid)3.demo3.线程创建1.参数介绍2.返回值3.demo4.线程退出与等待1.线程退出函数2.线程的取消线程能否被取消呢?demo1.线程的概念从用户空间资源来看:线程不代表资源,是程序的最小执行单元------线程与线程间只是栈不同进程代表资源,是程序调度的最小单元--------进程与进程是全复制从内核空间资源来看:Linux应用层中原创 2020-08-11 20:54:12 · 566 阅读 · 1 评论 -
Linux中线程的互斥锁
Linux中线程的互斥锁线程的互斥互斥锁通信机制①、锁的创建②、互斥锁的相关函数③、demo④、运行效果及分析线程的互斥互斥锁通信机制①、锁的创建pthread_mutex_t mutex; // 变量名可以自取②、互斥锁的相关函数函数描述int pthread_mutex_destroy(pthread_mutex_t *mutex)销毁锁int pthread_mutex_init(pthread_mutex_t *restrict _mutex,cons原创 2020-08-13 11:19:47 · 386 阅读 · 0 评论 -
Linux--线程的属性参数(const pthread_attr_t *attr)
线程属性typedef struct __pthread_attr_s{ int __detachstate; 设置可取消属性 int __schedpolicy; 调度策略 struct __sched_param __schedparam; int __inheritsched; int __scope; size_t __guardsize; int __stackaddr_set; void *__sta原创 2020-08-13 10:59:20 · 584 阅读 · 0 评论 -
Linux--线程的私有数据如何创建销毁和读取
Linux--线程的私有数据如何创建销毁和读取线程的私有数据私有数据的创建销毁以及读取私有数据的定义pthread_key_create参数:int pthread_key_delete参数:void *pthread_getspecific参数pthread_setspecific参数:demo运行效果线程的私有数据我们知道,Linux中多线程之间是共享内存的,那么一个全局变量更改了会影响别的线程,那么如何定义线程自己的私有数据呢?TSD私有数据,同名但是不同内存地址的私有数据结构私有数据的创建销原创 2020-08-13 10:31:42 · 290 阅读 · 0 评论 -
简单理解二进制的左移和右移(通俗易懂)
左移(<<)符号表示 : <<简单理解:二进制左移几位就是后面加几个0,前面去掉几位举例说明:39左移两位右移(>>)符号表示: <<简单理解:和左移同理,先计算二进制,右移几位就是在二进制的前面加几位(正数加0,负数加1),后面去掉几位举例说明:39右移两位左移一位相当于乘2,右移一位相当于除2(不完全等同),比除法快...原创 2020-08-11 09:48:02 · 60786 阅读 · 8 评论 -
C语言文件操作以及文件操作函数详解
C语言文件操作什么是文件:文件操作:编程操作 :文件操作基本函数说明fputc:fgetc:fputs:fgets:fprintf:fscanf:fseek:ftell:EOF:frewind:fwrite:fread:什么是文件:我们对文件的概念已经非常熟悉了,比如常见的 Word 文档、txt 文件、源文件等。文件是数据源的一种,最主要的作用是保存数据。文件操作:操作文件的正确流程为:打开文件 --> 读写文件 --> 关闭文件。文件在进行读写操作之前要先打开,使用完毕要关闭。编程原创 2020-08-09 08:46:37 · 641 阅读 · 0 评论 -
结构体与共用体
结构体与共用体结构体什么是结构体?定义结构体定义结构体变量:匿名结构体:实现给结构体取别名结构体嵌套联合体结构体什么是结构体?用来存储不同类型的(数组存储的是同种类型数据)数据定义结构体struct 结构体名字{ 需要存储的类型或者数组 };例:struct student { char name[20]; int id; };实际中,保存的数据一般不会是同一种类型。而结构体的大小也不是成员类型大小的简单相原创 2020-08-09 08:29:22 · 362 阅读 · 0 评论 -
C语言预处理
C语言预处理预处理预定义符号2.宏定义: 自定义一个宏(要符合标识符的命名规则),用于表示任意数据或者表达式.3.文件包含:4.条件编译: 根据不同的条件编译不同代码段.预处理预处理是编译前所做的工作.编译前,编译器自动调用预处理程序对源码中’#'开头的预处理部分进行处理,处理完毕之后,进入源码的编译阶段.预定义符号常用的预定义符号: __FILE__ : 编译的源文件名. __FUNCTION__ : 当前所在函数的函数名.原创 2020-08-09 08:17:16 · 315 阅读 · 0 评论 -
Visual Studio Code Windows下安装 以及C/C++插件大全
Visual Studio Code 安装 以及C/C++插件大全Visual Studio Code 安装1.官方下载2.选择安装的版本3.双击安装包,接受,下一步4.选择安装路径,下一步5.下一步6.创建桌面快捷方式7.安装8.完成C/C++插件大全1.打开VScode(因为我安装过所以是中文)2.按步骤操作3.安装插件Visual Studio Code 安装1.官方下载官方下载地址:https://code.visualstudio.com/2.选择安装的版本3.双击安装包,接受,下一步原创 2020-08-05 11:34:56 · 6396 阅读 · 5 评论 -
运算符的计算(按位与 按位或 异或 取反)
按位与运算符 [ & ]运算规则:依次比较两个二进制数的每一位,,按照有0则0,否则为1的规则,依次计算出一个新的二进制数即:0 & 0= 0 ,0 & 1= 0,1 & 0= 0, 1 & 1= 1例: 39 & 21 --> 0010 0111 & 0001 0101 --> 0000 0101按位或运算符 [ | ]运算规则:依次比较两个二进制数的每一位,,按照有1则1,否则为0的规则,依次计算出一个新的二进制数即原创 2020-07-23 18:13:55 · 998 阅读 · 2 评论