- 博客(19)
- 收藏
- 关注
原创 Linux 中 printf 函数不定长参数的实现
先看一下printf函数的原型.char print_buf[BUF_SIZE];void printf(const char *fmt, ...){ va_list ap; //定义一个指针变量 unsigned int i; va_start(ap, fmt); i = vsprintf(print_buf, sizeof(print_buf), fmt, ap); va_end(args); __put_char(print..
2021-09-09 14:51:09
563
原创 C语言_指针函数、函数指针与回调函数
前言碰到函数与指针的自由组合, 指针函数与函数指针, 总会混淆概念, 区分不清, 在这里我们会进行一个明确的区分, 让大家清楚的认识这俩个概念, 以及用法, 区分他们的重点是最后的俩个字, 是指针还是函数, 下面我们具体的来分析这俩者的区别把!指针函数定义与声明格式指针函数: 看最后的俩个字, 是函数, 它的本质是函数, 函数的返回类型是某一类型的指针,声明形式: 类型标识符* 函数名(函数参数1, 参数2…);有好几种写法都是正确的(这个看个人喜好):int *fun(int a, in
2021-08-27 17:01:15
389
原创 ARM Linux 系统设置开机自启动一个程序
前言在之前做项目的时候, 他是一个智能拨号模块, 是一个单独运行的程序, 在ARM开发板上每次重启之后, 需要自己再去手动运行一次, 这个时候我们想到既然他是智能拨号模块, 那就要实现一个全自动的, 也就是开机时让他自启动,自启动设置1. 在Linux 下编写一个hello.c(此程序需要在ARM上开机自启动)hello.c如下:#include <stdio.h>#include <string.h>#include <fcntl.h>#include
2021-08-25 13:53:32
5452
4
原创 C语言_常量指针与指针常量
前言我们经常会看到 const 和 指针 自由组合, const 在先 在后, 所产生的效果是不一样的. 经常会混淆概念, 在这里我们将他详细的区分一下, 什么是常量指针以及指针常量, 他们具体有什么特点, 让我们一起随着代码去验证!...
2021-08-18 19:33:50
177
原创 Linux_C程序内存分布
前言在学习Linux下C编程时, 我们了解到程序中的每一个变量都是在内存中有分布的.程序占用的内存区域如下: 系统空间、命令行参数区、栈区、堆区、数据段、文本段.
2021-07-30 20:38:05
177
原创 Quectel EC20 获取 MCC,MNC,APN
前言本人负责项目中的一个模块, 是Quectel EC20 4G 模块, 要自动获取SIM卡的APN, APN 即 access point name获取到APN有俩种方法, 第一种可以通过AT指令直接获取到APN, 第二种, AT指令获取到 MCC(移动设备国家代码) 与 MNC(移动设备网络代码), 根据MCC与MNC 从 apns-full-conf.xml 文件中查询到APN在网络上搜索了一圈, 发现还没有很明确的介绍使用什么AT指令来进行查询APN 或 MNC和MCC. 通过Quectel_
2021-07-28 17:49:25
4483
3
原创 Linux命令-----lsof
lsof(list open files)是一个查看进程打开的文件的工具.lsof是系统管理/安全的尤伯工具. 将这个工具称之为lsof真实名副其实, 因为它是指“列出打开文件 (lists openfiles) ”. 而有一点要切记, 在Unix中一切(包括网络套接口)都是文件....
2021-07-16 16:04:42
218
原创 C语言_判断大小端字节序的方法(联合和指针)
1. 什么是大小端字节序1.1 什么是字节序字节序, 即字节在电脑中存放时的序列与输入(输出)时的序列是先到的在前还是后到的在前.简单的来说是数据的各个字节是从高地址位存储还是低地址位存储. 这个顺序是由电脑的系统决定的.1.2 什么是小端字节序小端字节序 : 数据的低位存储在低地址空间, 数据的高位存储在高地址空间. 小端字节序称为LSB1.3 什么是大端字节序大端字节序 : 数据的低位存储在高地址空间, 数据的高位存储在低地址空间. 大端字节序称为MSB...
2021-06-29 15:54:54
303
原创 C语言_根据strstr函数实现了一个灵活的字符串查找函数
函数需要的背景在最近的串口读写中, 我们需要对从串口出来的数据进行精准查找, 和正确的数据进行判.注: 在EC20F4G模块下发送AT指令!比如给串口发送"AT", 成功会返回"OK", 失败返回"ERROR".给串口发送"AT+CPIN", 查找返回字符串中是否收到READY……函数想法由于发送AT指令, 从串口中读取的都是一个字符串, 从该字符串中进行精准查找关键字来进行判断是否成功, 符合需求, 每次都要使用strstr来进行查找, 发现查找的方法都是大致一样的, 代码完全是搬来搬去, 所
2021-06-13 20:06:36
385
1
原创 算法笔记----只出现一次的字符 _C++
只出现一次的字符问题描述:给你一个只包含小写字母的字符串;请你判断是否存在只在字符串中出现过一次的字符;如果存在,则输出满足条件的字符中位置最靠前的那个;如果没有, 输出 no.输入格式:共一行, 包含一个由小写字母构成的字符串;数据保证字符串的长度不超过 100000.输出格式:输出满足条件的第一个字符;如果没有, 则输出 no.思路分析代码实现...
2021-06-11 17:03:52
381
原创 Linux_静态库与动态库的制作与使用
什么是库本质上来说库是一种可执行的二进制代码 (但不可以独立执行), 可以被操作系统载入内存执行. 由于windows 和linux 的平台不同 (主要是编译器、汇编器和连接器的不同), 因此二者库的二进制是不兼容的. 本文仅限于介绍linux 下的库. linux 下的库有两种: 静态库和共享库 (动态库).静态库...
2021-04-17 10:28:17
2032
6
原创 Linux_zlog日志系统的安装与使用
1. zlog日志系统介绍zlog是一个高性能, 线程安全, 灵活, 概念清晰的纯C日志函数库. 作者编写的初衷是因为log4c不给力, 而log4j, log4cxx等log4系列的日志函数库在概念上不正确. zlog继承了unix操作系统中syslog的伟大传统, 将日志系统的分类, 级别, 输出方向, 输出格式完全解耦.1.1 zlog下载(Linux环境下)zlog下载地址: https://github.com/HardySimpson/zlog/archive/refs/heads/
2021-04-12 21:28:39
1955
3
原创 由三道关于三路握手的面试题来深入理解socket编程
socket深入了解socket通信在哪里进行三路握手, 初步了解是在客户端调用connect() 函数之后进行三路握手的第一次握手, 然后服务器端调用accept() 之后完成三路握手. 我们已经有了想法, 接下来通过代码以及Wireshark抓包工具来验证.服务器端部分代码以及Wireshark抓包现象如下:此时是正常的进行socket通信, 可以观察到三路握手已经成功.接下来我们在调用accept()函数之前, 睡眠100秒, 观察抓包现象.清晰的看到三路握手的产生, 接下来我们在调
2021-03-22 16:59:17
214
原创 Linux_cJSON--数据封装与解析
cJSON介绍JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式, 易于让人阅读. 同时也易于机器解析和生成. JSON虽然是Javascript的一个子集, 但JSON是独立于语言的文本格式, 并且采用了类似C语言的一些习惯.为什么我们要使用cJSON呢? 我们在传输数据时, 如果只有一个数据比如温度t = 26.53 .我们传输过去一定会知道这个数据是什么. 此时如果数据既有温度和湿度. 那么我们传输过去的是俩个字符串. 此时是不能分辨出温度还是湿度的值
2021-03-05 13:27:16
780
1
原创 计算机网络----TCP三路握手-四次挥手--Wireshark-抓包
WiresharkWireshark是一个网络封包分析软件, 用于撷取网络封包, 并尽可能显示出最为详细的网络封包资料.为了安全考虑, wireshark只能查看封包, 而不能修改封包的内容, 或者发送封包.Wireshark使用默认设置时, 信息会大量冗余, 可以使用过滤器来进行筛选.选择网卡开始抓包数据庞大, 通过显示过滤器进行筛选常用筛选表达式协议过滤:tcp // 只显示tcp协议IP过滤ip.src == 192.168.141.128 //筛选源地址为192.16
2021-03-03 12:25:20
335
原创 文件I/O--Linux下cp功能的实现
Linux下cp功能的实现Linux 下cp命令的使用方法: cp filename1 filename2 //将filename1中的内容复制到filename2中.学习了Linux下文件文件i/o, 让我们一起通过学习的内容来实现一个cp命令吧!逻辑分析通过调用open()函数来打开filename1文件(已经存在并有内容), 再继续open()创建并打开filename2文件.通过调用read()函数读filename1文件中的内容到缓冲区中, 再调用write()函数写进filen
2021-02-08 14:34:16
448
1
原创 树莓派DS18B20温度获取
DS18B20温度传感器DS18B20是常用的数字温度传感器, 其输出的是数字信号, 具有体积小, 硬件开销低, 抗干扰能力强, 单线数字温度传感器.接下来我们将在树莓派上通过文件i/o调用来获取温度.逻辑分析通过寻找相关路径, 打开文件, 进行读操作. 将文件内容打印到屏幕上.在我们的了解中, 实时温度数据在 /sys/bus/w1/devices/28-041731f7c0ff/w1_slave 这个文件中.我们可以通过调用read()函数直接读取该文件的内容, 并找到我们所需的温度, 打印
2021-01-31 17:37:39
500
原创 链表--头插与尾插实现队列和栈
单链表单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素.链表中的数据是以节点来表示的.节点是由数据域(data) ,以及指针域(next) 构成.链式存储结构如下:typedef struct node_s{ int data; struct node_s *next;} node_t;...
2021-01-29 20:34:38
883
原创 C语言--结构体内存对齐规则
C语言结构体对齐步骤:结构体各成员对齐.结构体总体对齐C语言结构体对齐规则:结构体(struct)的数据成员,第一个数据成员存放的地址为结构体变量偏移量为0的地址处.其他结构体成员自身对齐时,存放的地址为min{有效对齐值为自身对齐值, 指定对齐值} 的最小整数倍的地址处.注:自身对齐值:结构体变量里每个成员的自身大小注:指定对齐值:有宏 #pragma pack(N) 指定的值,这里面的 N一定是2的幂次方.如1,2,4,8,16等.如果没有通过宏那么在32位Linux主机上默
2021-01-17 21:28:47
28263
44
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人