小牛CKX
码龄10年
关注
提问 私信
  • 博客:462,351
    462,351
    总访问量
  • 27
    原创
  • 1,183,695
    排名
  • 180
    粉丝
  • 1
    铁粉

个人简介:用于记录个人工作学习中常用的知识,用以备忘。QQ:870516815

IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:湖北省
  • 加入CSDN时间: 2015-04-23
博客简介:

CKX的博客

博客描述:
用来记录学习和工作中常用的知识
查看详细资料
个人成就
  • 获得765次点赞
  • 内容获得145次评论
  • 获得3,167次收藏
  • 代码片获得347次分享
创作历程
  • 1篇
    2022年
  • 4篇
    2020年
  • 3篇
    2019年
  • 19篇
    2018年
成就勋章
TA的专栏
  • 笔记
    23篇
  • 树莓派
    3篇
  • 好奇
创作活动更多

HarmonyOS开发者社区有奖征文来啦!

用文字记录下您与HarmonyOS的故事。参与活动,还有机会赢奖,快来加入我们吧!

0人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

大小端判断和转换

大小端的判断,位操作变化,函数调用
原创
发布博客 2022.05.08 ·
1000 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

DHCP动态主机配置协议探究

DHCP的作用是为局域网中的每台计算机自动分配TCP/IP信息,包括IP地址、子网掩码、网关、以及DNS服务器等。一. DHCP基本介绍DHCP是BOOTP协议的进化版本,所以有时候用老版本的抓包软件显示DHCP的报文类型为bootp。 DHCP的报文用UDP方式封装的。 DHCP服务器侦听端口:67,DHCP客户端侦听端口:68,DHCP中继侦听端口:67。 DHCP地址分配方式:手工分配、自动分配(租期无限长)、动态分配(具有一定期限) 服务器为客户端分配IP的顺序:mac静态绑定、c.
原创
发布博客 2020.12.12 ·
782 阅读 ·
1 点赞 ·
0 评论 ·
5 收藏

DHCP学习报文参考

发布资源 2020.12.12 ·
zip

realloc动态内存调整探究

1 关于动态内存C程序使用malloc、realloc等内存申请函数在堆上分配和释放内存的。程序在执行期间有两个内存区域,一个是内存区域是栈(stack),另一个是堆(heap)。栈中的空间分配给函数的参数和本地变量,执行完该函数后,存储的参数和本地变量的内存空间就会自动释放。在堆上分配的内存,在不需要的时候要用free释放空间,由程序员控制。使用realloc的好处:不需要预先分配存储空间,且可以按需扩大或缩小,有效的使用内存空间。使用realloc的坏处:会占用大量CPU资源。一般情况下
原创
发布博客 2020.11.18 ·
2673 阅读 ·
12 点赞 ·
3 评论 ·
20 收藏

va_list可变参数理解(va_start/va_end...)

在工作中,一些可变参函数里总能看到va_start、va_end、vsnprintf、va_list等相关函数,甚是疑惑,到底是干啥的,有什么作用呢?va = variable argument先来简单介绍一下可变参数吧,先来看看最最熟悉的printf函数。int printf(const char *format, ...);这三个点点就是可变参数。好了,开始介绍va相关内容吧!1.作用VA_LIST是在C语言中解决变参问题的一组宏。有点绕,我的理解,如果你写代码过程中,需要对
原创
发布博客 2020.11.08 ·
1287 阅读 ·
2 点赞 ·
0 评论 ·
15 收藏

c中结构体数据对齐问题

1.为什么需要数据对齐提升CPU读取数据的效率。CPU每次都是从以4字节(32位CPU)或是8字节(64位CPU)的整数倍的内存地址中读进数据的(例如32位的只能0x00000004、0x00000008这种地址一次读4字节的数据)。如果数据不对齐,例如一个int类型放在0x00000004、0x00000008这两个内存地址中间,CPU就会多次读取,如果把整形对齐存放在0x000000...
原创
发布博客 2020.01.04 ·
2520 阅读 ·
11 点赞 ·
3 评论 ·
22 收藏

[笔记]linux C/C++ 获取精确时间方法

获取带毫秒的时间#include <time.h>#include <sys/time.h>//调用函数时候可以传入字符串进行区别和标记void sysUsecTime(const char *a){ struct timeval tv; struct timezone tz; struct tm *p; gettimeofda...
原创
发布博客 2019.11.29 ·
985 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

虚拟路由器冗余协议vrrp原理的理解

VRRP(VirtualRouterRedundancyProtocol)虚拟路由器冗余协议作用避免由于局域网网关单点故障而导致的网络中断,如下图,如果交换机与外网连接出现故障,则所有的pc都不能访问外部网络。解决方法在网络中增加两台路由器(或者三层交换机)部署vrrp,作为冗余的网关,如下图VRRP特点能让多台同属于一个广播域的网络设备能够协同工作,实...
原创
发布博客 2019.09.08 ·
2923 阅读 ·
1 点赞 ·
0 评论 ·
11 收藏

Linux下socket编程:TCP连接

目录一、流程简述 服务器端 客户端二、概念及函数 1.套接字描述符 2.socket函数 3.bind函数 4.connect函数 5.listen函数 6.accept函数 7.close函数三、代码 服务端 客户端四、笔记 1.一个标准的三次握手抓包 ​2.小技巧:打印出connect过程的错误一...
原创
发布博客 2019.08.21 ·
2850 阅读 ·
4 点赞 ·
2 评论 ·
18 收藏

生成树协议STP、RSTP和MSTP原理的理解

在组网中,很可能会出现环路或者称冗余链路,为避免形成广播风暴,需要一种方法来避免形成环路,并且在主链路故障中断时候,可以将冗余链路自动切换为转发状态,以恢复网络的连通性。生成树协议(STP、RSTP、MSTP)就可以实现这样的功能。STP(802.1D,SpanningTreeProtocol,生成树协议)基本思想将网络的拓扑修剪为树形拓扑,拓扑图形状与一棵树相似,这样就不会...
原创
发布博客 2018.12.20 ·
46014 阅读 ·
97 点赞 ·
27 评论 ·
549 收藏

C语言define替换printf

问题:当我想要调试的时候,想直接printf输出打印当我将代码上设备的时候,希望输出log里(下图代码里cxtlog是输出到log的函数,这里不讲实现了)解决:设置一个CFG_DEBUG宏定义,定义了这个宏就使用printf,没有定义就输出log用#define来重定义用法:printf里的参数是可变长的,就需要用到变参宏定义,这是系统自带的。‘...’和'__VA_A...
原创
发布博客 2018.11.29 ·
8337 阅读 ·
4 点赞 ·
3 评论 ·
12 收藏

c语言实现两个超大数的相加(超长数据)

这几天无聊,突然想起来,大学当时有个问题困扰着我两个超大的数怎么保存和相加呢,计算机的整形32位的最大也就4294967296,超过这个数就计算不了了哇然后就想动手实践一下思路:1.超长数据怎么存呢。脑子一拍,巨长的数肯定用字符数组来存哇,没毛病。2.要怎么运算呢。我想的是,一个数最大是4294967296,长度为10,那我两个9长度的数据相加,肯定不会超过1999999998...
原创
发布博客 2018.11.28 ·
16989 阅读 ·
21 点赞 ·
8 评论 ·
45 收藏

sed命令替换指定字符后不固定字符串,文本信息的替换删除

sed主要用来处理文本内容的修改,文本的提取分割可以使用awk和cut命令,参考本人文章linux常用文本字符分割分析awk和cut命令sed命令格式:sed [选项] '.../.../...'[输入文件]...'参数1/.../参数2' 这个和vi里命令行模式的输入格式很像,比如替换文本/s/root/aaa/g常用选项:-n 仅显示处理的行-i 直接对原文件进行修改...
原创
发布博客 2018.10.31 ·
19186 阅读 ·
9 点赞 ·
6 评论 ·
25 收藏

C语言extern关键字用法和理解

extern表明变量或者函数是定义在其他其他文件中的例如:extern int a;显式的说明了a的存储空间是在程序的其他地方分配的,在文件中其他位置或者其他文件中寻找a这个变量。用法一个c文件需要调用另一个c文件里的变量或者函数,而不能从.h文件中调用变量。详见下文1 extern int a = 5与int a = 5意义是一样的,都是定义。而extern int a;......
原创
发布博客 2018.09.27 ·
182702 阅读 ·
467 点赞 ·
38 评论 ·
1711 收藏

Linux下C程序执行shell命令并获取返回结果的方法

Linux下的C编程有以下几种方法可以执行shell命令system()函数 exec函数簇 popen()函数如果还需要获取返回结果,有两种较简单方便的方法popen()函数 匿名管道1.system()函数所需头文件:#include&lt;stdlib.h&gt;函数原型:int system(const char *cmdstring);           ...
原创
发布博客 2018.08.29 ·
39101 阅读 ·
24 点赞 ·
3 评论 ·
144 收藏

Linux消息队列编程(简单应用)

消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序。可以解决两个进程的读写速度不同(处理数据速度不同),系统耦合等问题,而且消息队列里的消息哪怕进程崩溃了也不会消失。 最简单的消息内存的使用流程①ftok函数生成键值②msgget函数创建消息队列③msgsnd函数往消息队列发送消息④...
原创
发布博客 2018.08.15 ·
38533 阅读 ·
63 点赞 ·
40 评论 ·
335 收藏

Linux下共享内存编程(共享存储空间)

共享存储允许两个或多个进程共享一个给定的存储区,是进程间通信最快的一种方式。不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。最简单的共享内存的使用流程①ftok函数生成键值②shmget函数创建共享内存空间③shmat函数获取第一个可用共享内存空间的地址④shmdt函数进行分离(对共享存储段操作结束时的步骤,并不是从系统中删除共享内存和结构)⑤shm...
原创
发布博客 2018.07.29 ·
44622 阅读 ·
38 点赞 ·
6 评论 ·
267 收藏

Linux时间与系统时间相差8小时的解决办法

原因是时区不同在/etc/profile文件中增加一行 export TZ='CST-8'使文件立即生效source /etc/profile 或者 . /etc/profile
原创
发布博客 2018.07.05 ·
25025 阅读 ·
4 点赞 ·
6 评论 ·
7 收藏

Linux编程三种常用线程同步

本文介绍三种常用的线程同步方法,互斥量、条件变量、信号量共同需要的头文件为#include&lt;pthread.h&gt;互斥量强调资源访问互斥条件变量是通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足信号量强调线程间同步一、互斥量(mutex)互斥量在同一时间只有一个线程能访问,任何其他试图再次对互斥量加锁的线程都会被阻塞直到当前线程释放该互斥锁。在Linux下,线程的互斥量数...
原创
发布博客 2018.05.29 ·
380 阅读 ·
1 点赞 ·
0 评论 ·
3 收藏

Linux编程常用alarm定时器

写程序时经常有让程序运行几秒后退出这种需求,就需要用到定时器,个人常用的是alarm定时器,方便好用。 函数原型unsigned int alarm(unsigned int seconds);seconds为指定秒数 所需头文件#include&lt;unistd.h&gt; 一个进程只能使用一个alarm闹钟,有多个alarm闹钟时,闹钟时间会更新为最后一个定时器所指定的秒数时间。alarm(...
原创
发布博客 2018.05.29 ·
908 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏
加载更多