
笔记
文章平均质量分 76
小牛CKX
用于记录个人工作学习中常用的知识,用以备忘。QQ:870516815
展开
-
大小端判断和转换
大小端的判断,位操作变化,函数调用原创 2022-05-08 22:11:34 · 1042 阅读 · 0 评论 -
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 18:18:37 · 833 阅读 · 0 评论 -
realloc动态内存调整探究
1 关于动态内存C程序使用malloc、realloc等内存申请函数在堆上分配和释放内存的。程序在执行期间有两个内存区域,一个是内存区域是栈(stack),另一个是堆(heap)。栈中的空间分配给函数的参数和本地变量,执行完该函数后,存储的参数和本地变量的内存空间就会自动释放。在堆上分配的内存,在不需要的时候要用free释放空间,由程序员控制。使用realloc的好处:不需要预先分配存储空间,且可以按需扩大或缩小,有效的使用内存空间。使用realloc的坏处:会占用大量CPU资源。一般情况下原创 2020-11-18 20:46:52 · 2882 阅读 · 3 评论 -
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 19:46:03 · 1413 阅读 · 0 评论 -
c中结构体数据对齐问题
1.为什么需要数据对齐提升CPU读取数据的效率。CPU每次都是从以4字节(32位CPU)或是8字节(64位CPU)的整数倍的内存地址中读进数据的(例如32位的只能0x00000004、0x00000008这种地址一次读4字节的数据)。如果数据不对齐,例如一个int类型放在0x00000004、0x00000008这两个内存地址中间,CPU就会多次读取,如果把整形对齐存放在0x000000...原创 2020-01-04 17:32:16 · 2581 阅读 · 3 评论 -
[笔记]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 17:11:03 · 1031 阅读 · 0 评论 -
虚拟路由器冗余协议vrrp原理的理解
VRRP(VirtualRouterRedundancyProtocol)虚拟路由器冗余协议作用避免由于局域网网关单点故障而导致的网络中断,如下图,如果交换机与外网连接出现故障,则所有的pc都不能访问外部网络。解决方法在网络中增加两台路由器(或者三层交换机)部署vrrp,作为冗余的网关,如下图VRRP特点能让多台同属于一个广播域的网络设备能够协同工作,实...原创 2019-09-08 12:06:39 · 3023 阅读 · 0 评论 -
Linux下socket编程:TCP连接
目录一、流程简述 服务器端 客户端二、概念及函数 1.套接字描述符 2.socket函数 3.bind函数 4.connect函数 5.listen函数 6.accept函数 7.close函数三、代码 服务端 客户端四、笔记 1.一个标准的三次握手抓包 2.小技巧:打印出connect过程的错误一...原创 2019-08-21 23:41:24 · 2895 阅读 · 2 评论 -
生成树协议STP、RSTP和MSTP原理的理解
在组网中,很可能会出现环路或者称冗余链路,为避免形成广播风暴,需要一种方法来避免形成环路,并且在主链路故障中断时候,可以将冗余链路自动切换为转发状态,以恢复网络的连通性。生成树协议(STP、RSTP、MSTP)就可以实现这样的功能。STP(802.1D,SpanningTreeProtocol,生成树协议)基本思想将网络的拓扑修剪为树形拓扑,拓扑图形状与一棵树相似,这样就不会...原创 2018-12-20 22:15:17 · 47043 阅读 · 27 评论 -
C语言define替换printf
问题:当我想要调试的时候,想直接printf输出打印当我将代码上设备的时候,希望输出log里(下图代码里cxtlog是输出到log的函数,这里不讲实现了)解决:设置一个CFG_DEBUG宏定义,定义了这个宏就使用printf,没有定义就输出log用#define来重定义用法:printf里的参数是可变长的,就需要用到变参宏定义,这是系统自带的。‘...’和'__VA_A...原创 2018-11-29 16:21:03 · 8599 阅读 · 3 评论 -
sed命令替换指定字符后不固定字符串,文本信息的替换删除
sed主要用来处理文本内容的修改,文本的提取分割可以使用awk和cut命令,参考本人文章linux常用文本字符分割分析awk和cut命令sed命令格式:sed [选项] '.../.../...'[输入文件]...'参数1/.../参数2' 这个和vi里命令行模式的输入格式很像,比如替换文本/s/root/aaa/g常用选项:-n 仅显示处理的行-i 直接对原文件进行修改...原创 2018-10-31 10:35:55 · 19434 阅读 · 6 评论 -
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 00:22:46 · 195640 阅读 · 38 评论 -
Linux下C程序执行shell命令并获取返回结果的方法
Linux下的C编程有以下几种方法可以执行shell命令system()函数 exec函数簇 popen()函数如果还需要获取返回结果,有两种较简单方便的方法popen()函数 匿名管道1.system()函数所需头文件:#include<stdlib.h>函数原型:int system(const char *cmdstring); ...原创 2018-08-29 23:56:00 · 39488 阅读 · 3 评论 -
fedora的nfs服务器的安装和启动配置
安装软件包服务端和客户端都得安装nfs-utils:这个是NFS服务主程序(包含rpc.nfsd、rpc.mountd、daemons)rpcbind:这个是CentOS6.X的RPC主程序(CentOS5.X的为portmap)yum install -y nfs-utils rpcbind配置在原创 2018-01-30 14:17:38 · 1183 阅读 · 0 评论 -
shell学习积累,循环,运算,判断
需要经常注意的问题赋值不需要$,但读值必须不能忘了在变量前加上$shift可以跳过参数,如shift 2,命令行输入aaa.sh a b c d 相当于命令行输入就变成aaa.sh c dShell运算(+、-、\*、/)expr只对整数进行运算,且中间每一段都必须要用空格隔开语法`exprinteger1+integer2`或者$(exprinteger1...原创 2018-03-08 23:48:41 · 361 阅读 · 0 评论 -
流IO和文件IO的简单使用
流文件IO(fopen....)是标准IO,包含在stdio.h中,可移植性强,使用的是文件指针而文件IO(open...)可移植性低,包含在fcntl.h中,使用的是一个整形的文件描述符 标准IO/流IO下面这个程序是用流来读写文件的,从终端输入,重复100遍的输入文件中,再读出来打印至屏幕上#include<stdio.h>int main(){ FILE *fp; ...原创 2018-04-18 12:05:49 · 292 阅读 · 0 评论 -
linux编程进程与线程基本实例
1、对比 进程是资源分配的最小单位,线程是程序执行的最小单位 进程拥有自己的独立地址空间,线程间共享进程的所有资源2、进程 需要头文件 #include<stdlib.h> #include<unistd.h> 2.1 进程的创建 pid_t fork( void); 返回值: 若成功调用一次则返回两个值,子进程返回0,父...原创 2018-04-20 15:04:50 · 1712 阅读 · 0 评论 -
Linux编程常用alarm定时器
写程序时经常有让程序运行几秒后退出这种需求,就需要用到定时器,个人常用的是alarm定时器,方便好用。 函数原型unsigned int alarm(unsigned int seconds);seconds为指定秒数 所需头文件#include<unistd.h> 一个进程只能使用一个alarm闹钟,有多个alarm闹钟时,闹钟时间会更新为最后一个定时器所指定的秒数时间。alarm(...原创 2018-05-29 22:56:36 · 933 阅读 · 0 评论 -
Linux编程三种常用线程同步
本文介绍三种常用的线程同步方法,互斥量、条件变量、信号量共同需要的头文件为#include<pthread.h>互斥量强调资源访问互斥条件变量是通过允许线程阻塞和等待另一个线程发送信号的方法弥补了互斥锁的不足信号量强调线程间同步一、互斥量(mutex)互斥量在同一时间只有一个线程能访问,任何其他试图再次对互斥量加锁的线程都会被阻塞直到当前线程释放该互斥锁。在Linux下,线程的互斥量数...原创 2018-05-29 23:58:50 · 397 阅读 · 0 评论 -
Linux时间与系统时间相差8小时的解决办法
原因是时区不同在/etc/profile文件中增加一行 export TZ='CST-8'使文件立即生效source /etc/profile 或者 . /etc/profile原创 2018-07-05 08:52:17 · 25091 阅读 · 6 评论 -
Linux下共享内存编程(共享存储空间)
共享存储允许两个或多个进程共享一个给定的存储区,是进程间通信最快的一种方式。不要同时对共享存储空间进行写操作,通常,信号量用于同步共享存储访问。最简单的共享内存的使用流程①ftok函数生成键值②shmget函数创建共享内存空间③shmat函数获取第一个可用共享内存空间的地址④shmdt函数进行分离(对共享存储段操作结束时的步骤,并不是从系统中删除共享内存和结构)⑤shm...原创 2018-07-29 23:44:08 · 44744 阅读 · 6 评论 -
Linux消息队列编程(简单应用)
消息队列,Unix的通信机制之一,可以理解为是一个存放消息(数据)容器。将消息写入消息队列,然后再从消息队列中取消息,一般来说是先进先出的顺序。可以解决两个进程的读写速度不同(处理数据速度不同),系统耦合等问题,而且消息队列里的消息哪怕进程崩溃了也不会消失。 最简单的消息内存的使用流程①ftok函数生成键值②msgget函数创建消息队列③msgsnd函数往消息队列发送消息④...原创 2018-08-15 23:35:51 · 38627 阅读 · 40 评论 -
linux常用文本字符分割分析awk和cut命令
详细文章:awk命令用法 点击打开链接cut命令详解 点击打开链接由passwd文件做示例,提取相关部分[root@localhost 桌面]# cat /etc/passwd | head -10root:x:0:0:root:/root:/bin/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon:x:2:2:daemo原创 2018-01-26 16:07:38 · 5221 阅读 · 0 评论