自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 CRC(循环冗余校验码的校验方法)

2.生成多项式:一般多项式会给,从最高位的指数位数就可以得到有几个校验码;如果没给多项式,肯定会给个多项式二进制码,根据它来推就行(具体推的规律,下面会讲)5.取余:由信息码除以多项式对应的二进制数进行取余,余到最后的值就是算出来的校验位的值。4.多项式对应二进制数:由多项式对应得出二进制数。3.校验位:由多项式的最高位指数得出。最后把校验位的值加在信息码后面就行。1.信息码:即给出要校验的二进制码。

2023-09-14 23:02:58 700

原创 海明码校验方法和检错方法

前言:大家有没有和我一样,对海明码怎么校验和检错很感兴趣,下面我来说说它是怎么校验的。D0,D1,D2,D3,D4,D5,D6,D7是二进制码。奇校验把偶校验的值取反就行。注意:上述公式P和D之间都是用的异或运算。注意:上述公式D之间都是用的异或运算。至于有多少个校验值的数目,根据公式。P1,P2,P3,P4是校验码。

2023-09-14 22:32:23 381

原创 十进制小数转换为单双精度浮点数方法

和单精度浮点值转换一样。

2023-09-14 21:59:06 1538

原创 Linux ipc通信(消息对列)

EPERM(IPC_SET或者IPC_RMID命令被使用,但调用程序没有写的权限)这个结构体的作用是用来管理消息队列的,通过cmd指令来设置这结构体中的值,进而达到控制消息队列的目的。IPC_SET:设置消息队列的数据结构msqid_ds中的ipc_perm元素的值。我们再说一下队列的msqid_ds结构体,对于每一个队列都有一个msqid_ds来描述队列当前的状态。IPC_STAT:读取消息队列的数据结构msqid_ds,并将其存储在buf指定的地址中。msgsz - 消息的长度,指的消息数据的长度。

2023-09-10 21:27:22 236

原创 linux共享内存(ipc通信)

例如,如果你只是想获取一个已经存在的共享内存段,那么你可以使用 IPC_STAT 标志。如果你想测试并创建一个新的共享内存段(如果已经存在,则不创建),那么你可以使用 IPC_EXCL 和 IPC_CREAT 标志。**控制共享内存段的行为。**作用是根据文件名和第二个参数工程序号进行组合,申请一个键值key_t,它能保证不同的进程在创建ipc对象时得到互不干扰的键值。key值只是唯一标识这个共享内存,size是这个共享内存最小的空间,如果创建新的共享内存段,则必须指定其size,反之,可以指定为0。

2023-09-06 22:44:56 176

原创 linux中的/dev/null

应用程序可以从这些设备获取数据,但该数据不是来自物理设备,而是来自 fra/dev/null,它是一种特殊的虚拟设备,用于写入而不是读取。如您所见,没有输出。例如,/dev/sda 可能是您的主硬盘驱动器,/dev/sdb 可能是您现在正在使用的笔记本驱动器的文件。通过重定向到/dev/null,来丢弃对应的内容,把正确的输出重定向到/dev/null.意思是只打印错误的信息。把标准错误重定向到标准输出,和标准输出一样,接着标准输出重定向了a.a文件,所以最终是把标准错误以及标准输出重定向到了a.a文件。

2023-08-15 23:05:07 408

原创 linux中的ifconfig和ip addr

写下自己的困惑,ip addr和ifconfig到底有什么不同

2023-08-13 00:01:03 1016

原创 Linux系统编程(续)

linux系统编程续

2022-12-18 22:04:04 411 1

原创 Linux系统编程

linux系统编程基本内容记录。

2022-12-01 21:47:09 882

原创 C++信号概念

C++信号函数,还有在linux下的信号处理及其区别。

2022-11-18 21:31:28 945

原创 unordered_map 的bucket(桶接口)

C++ unordered_map(桶接口)

2022-10-30 19:10:39 651

原创 UDP(数据报通信)

UDP数据报通信,是linux网络通信的模式之一,得清楚。

2022-09-12 16:20:53 579

原创 进程间通信

本文主要是介绍linux开发中的进程间通信的几种方式。

2022-07-29 01:02:30 276

原创 Linux多任务编程

进程的控制1.进程的创建任何一个用户进程的创建都是由现有的一个进程完成的,进程的创建要经过fork和exec两个过程。fork是为新进程分配相应的数据结构,并将父进程的相应上下文信息复制过来。exec是将可执行文件的正文和数据转入内存覆盖它原来的(从父进程复制过来的),并开始执行正文段。(把当前进程替换为一个新进程),在使用这些系统调用的程序中要加入以下头文件和外部变量:#include extern char **environ;参数表的传递有关(l表示(list),v表...

2022-06-12 19:21:46 172

原创 Linux串口编程

1.打开串口在Linux下串口文件是位于 /dev下的串口一为 /dev/ttyS0串口二为 /dev/ttyS1打开串口是通过使用标准的文件打开函数操作例如:int fd;//以读写的方式打开串口fd = open(“/dev/ttyS0”,O_RDWR);2.设置串口最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置主要是设置struct termios 结构体的成员值。struct termio{unsigned short c_iflag;//输入模式标

2022-05-29 22:24:56 4921

原创 Linux进程管理命令

1.ps命令ps aux:查看系统中的所有进程,使用BS操作系统格式ps -le:查看系统中的所有进程,使用LINUX标准命令格式选项:a:显示一个终端的所有进程,除会话引线外;u:显示进程的归属用户及内存的使用情况;x:显示没有控制终端的进程;-l:长格式显示更加详细的信息;-e:显示所有进程;常用的命令:ps aux:可以查看系统中所有的进程ps -le:可以查看系统中所有的进程,而且还能看到进程额父进程的PID和进程优先级;ps -l:只能看到当前shell产生的进程;僵尸进程

2022-05-24 17:17:39 2662

原创 Linux文件读写和定位函数

1.数据块I/O:fread与fwrite函数原型:size_t fread(void *buffer,size_t size,size_t count,FILE *fp)size_t fwrite(void *buffer,size_t size,size_t count,FILE *fp)功能:读/写数据块返回值:成功,返回读/写的块数;出错或文件尾,返回0说明:typedef unsigned size_t;buffer:指向要输入/输出数据块的首地址的指针size:每个要读/写的数

2022-05-23 17:33:10 469

原创 Linux文件编程基础

二进制文件特点:存储量小,速度快,便于存放中间结果文本文件特点:存储量大,速度慢,便于对字符操作1.文件使用方式r/rb(只读):为输入打开一个文本/二进制文件w/wb(只写):为输出打开或建立一个文本/二进制文件a/ab(追加):向文本/二进制文件尾追加数据r+/rb+(读写):为读/写打开一个文本/二进制文件w+/wb+(读写):为读/写建立一个文本/二进制文件a+/ab+(读写):为读/写打开或建立一个文本/二进制文件2.文件的读写字符I/O:fputc与fgetcfputc

2022-05-22 23:25:13 143

原创 Linux Makefile

Makefile基本概念GNU make工作流程①:查找当前目录下的Makefile文件②:初始化文件中的变量③:分析Makefile中的所有规则④:为所有的目标文件创建依赖关系⑤:根据依赖关系,决定哪些目标文件要重新生成⑥:执行生成命令Makefile规则语法一个Makefile文件主要含有一系列的规则,每条规则包含以下内容。一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;目标也可以是要执行的动作,如“clean”一个或多个依赖文件(dependenc

2022-05-13 17:06:55 300

原创 GDB调试器

GDB调试器的功能1.启动程序,并且可以设置运行环境和参数来运行指定程序。2.让程序在指定断点处停止执行3.对程序做出相应的调整,这样就能纠正一个错误后继续调试调试分析选项-g选项:生成调试信息,GNU调试器可利用该信息。GCC编译器使用该选项进行编译时,将调试信息加入到目标文件当中,这样gdb调试器就可以根据这些调试信息来跟踪程序的执行状态。-pg选项:编译完成之后,额外产生一个性能分析所需的信息。gdb调试命令file: 指定要调试的可执行程序kill: 终止正在调试的可执行程序

2022-05-07 22:14:55 355

原创 数据结构之树的存储结构

大家可能都知道,存储结构有顺序存储结构和链式存储结构。很明显这两个结构不管哪一个,都不能很好的表达数这种数据结构,所以我们特此在这说一下数的存储结构用这个树作为例子:**树的存储结构分为以下几类一:双亲表示法言外之意就是以双亲作为索引的关键词的一种存储方式,我们假设以一组连续空间存储树的结点,同时在每个结点中,附加一个指示其双亲结点在数组中位置的元素代码如下:这个图想知道这个结点的孩子,要这么个结构,这个图给出答案下面这个图是表示他兄弟之间的表示方法二:孩子表示法根据树的度,声明

2022-04-28 22:00:53 1701 2

原创 KMP算法

一:首先大家初次看见kmp算法演示图会有点懵,觉得在讲什么啊,根本听不懂的好吧,但是,当你静下心来好好想想,就觉得通了1.1:KMP算法的next数组和K数组(其实他们两个数组意义是一样的),它们出现的条件是匹配字符串的前缀和后缀是否有相同的字母,如没有,那当匹配串和被匹配串出现不匹配的时候,就把匹配串往后移一位就行,如图所示:1.2:如果匹配相同,看前后缀有几个相同的字母,移的个数是相同字母个数加一,如图所示:还有人就会问了,怎么判读它的前后缀个数啊,在这里我给大家讲一下:就是当匹配字符串与被匹配字

2022-04-27 22:33:30 57

原创 队列数据结构详解

1.队列既可以用链表实现,也可以用顺序表实现。跟栈相反的是,栈一般用顺序表来实现,而队列我们常用链表来实现,称为链队列,它是后入前出(头结点进,尾结点出),头结点不存元素实现代码:typedef struct QNode//定义队列的链表结点{ElemType data;struct QNode *next; }QNode,*QueuePrt;typedef struct{QueuePrt front,rear;//队头,尾指针}LinkQueue;代码思路:队列数据结构的定义和

2022-03-30 20:33:09 2336 1

原创 逆波兰表达式c算法

*示例:输入 1 2 - 4 5 + ,算出它的逆波兰表达式值。代码解决:#include <stdio.h>#include <stdlib.h>#include <ctype.h>//这是啥#define STACK_INIT_SIZE 20#define STACKINCREMENT 10#define MAXBUFFER 10typedef double ElemType;typedef struct{ElemType *base;Elem

2022-03-28 22:23:46 583

原创 栈的顺序存储结构以及栈的创建和入栈出栈

这里定义一个顺序存储的栈typedef struct{ElemType *base;ElemType *top;int stackSize;}sqStack;它包含三个元素:base,top,stackSize。其中base是指向栈底的指针变量,top是指向栈顶的指针变量,stackSize指示栈的当前可使用的最大容量。创建一个栈#define STACK_INIT_SIZE 100initStack(sqStack *s){s->base = (ElemType *)mall

2022-03-25 22:12:27 600

转载 如何从gitlab上单位项目拉取代码

转载:http://t.csdn.cn/JWFuM

2022-03-16 16:39:06 217

原创 C++中创建链表

创建链表:**eg:struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {}}***其中:创建一个新结点得这样写:ListNode a = new ListNode();因为a是地址,创建的结

2022-03-09 22:45:20 1815

转载 C++中:和::的含义与区别

前言:相信大多数读者和我一样在C++中总是分不清:和::的区别,现在,咱们就彻底解决它。一“::”1)类作用域操作符。“::”指明了成员函数所属的类。如:M::f(s)就表示f(s)是类M的成员函数。**2)表示“域操作符”.例:**声明了一个类A,类A里声明了一个成员函数void f(),但没有在类的声明里给 出f的定义,那么在类外定义f时, 就要写成void A::f(),表示这个f()函数是类A的成员函数。3)表示引用成员函数及变量,作用域成员运算符例:System::Math::Sqrt(

2022-03-09 22:34:31 3382

原创 C++中map可以解决整数和字符结合的问题

当遇到整数和字符结合的问题时,首先想到map这种数据结构,它里面有个key和一个value,key可以指向value,他两就关联到一起了eg:注意:c++和java不同,它的private关键字在数据结构上方还得加一个:...

2022-03-07 22:23:33 742

原创 C语言中指针函数中有指针数组返回数组

关于指针函数中有指针数组的处理。

2022-03-05 23:03:06 1208

原创 Synchronized的理解

Synchronized实际是用对象锁保证了临界区内代码的原子性,临界区内代码对外是不可分割的,不会被线程的切换所打断你可以做这样一个对比:1.synchronized(对象)中的对象,可以想象为一个房间(room),有唯一入口(门)房间只能一次进入一人进行计算,线程t1,t2想象成2个人2.当线程t1执行到synchronized(room)时就好比t1进入了这个房间,并锁住了门拿走了钥匙,在门内执行它所属的代码3.这时候如果t2也运行到了synchronized(room)时,他发现门被锁住了,

2021-11-15 00:27:47 557

原创 临界区与竞态条件

临界区概念:一段代码块内如果存在对共享资源的多线程读写操作,称这段代码块为临界区。例如:static int counter = 0;static void increment()//临界区{counter++;}static void decrement()//临界区{counter–;}容易出现的问题:多个线程访问共享资源,在对共享资源进行读写操作时易发生指令交错,就会出现问题。解决方法:synchronized,即俗称的对象锁,它采用互斥的方式让同一时刻至多只有一个线程能

2021-10-17 20:54:02 155

原创 Interrupt()多线程设计模式之两阶段终止模式

两阶段终止模式(Two Phase Termination)1.概念:在一个线程T1中如何“优雅”终止线程T2?这里的【优雅】指的是给T2一个料理后事的机会。2.图解:3.对图进行解释:就是在一个线程执行while()循环时,第一个阶段终止是调用isInterrupt()方法看有没有被打断,如果打断,那就料理后事结束循环;如果没有被打断,第二个终止阶段就是监控线程睡眠2秒后看有无异常,没有异常就执行监控记录,有异常就设置打断标记,返回while循环继续判断打断标记,然后继续上述循环。4.适用场景:

2021-10-17 16:39:30 109

原创 interrupt()方法理解和实例

本文主要讲interrupt方法的用途和用法,还请大家往下看。jdk中的描述是这样的:interrupt():中断这个线程。 除非当前线程中断自身,这是始终允许的,所以调用此线程的checkAccess方法,这可能会导致抛出SecurityException 。 如果该线程阻塞的调用wait() , wait(long) ,或wait(long, int)的方法Object类,或者在join() , join(long) , join(long, int) , sleep(long) ,或sleep(l

2021-10-16 18:25:14 972

原创 yield()和sleep()的区别

sleep()1.调用sleep()会让当前线程从running转换到timed wating(阻塞)2.其他线程可以使用interrupt方法打断正在睡眠的线程,这时sleep()方法会抛出InterruptException3.睡眠结束后的线程未必会立刻得到执行(还得看操作系统的任务调度器)4.建议使用timeUnite来代替Thread的sleep来获得更好的可读性yield1.调用yield会让当前线程从running(运行状态)转换为runnabled(就绪状态),然后调度执行其他线程

2021-10-09 21:07:30 266

原创 线程中常见方法的描述

本文主要介绍一下线程中常见方法的描述和注意事项,写的有错误的地,还望读者私信指出start():功能说明:启动一个新的线程,在新的线程中运行run方法的代码。注意:start()方法只是让线程就绪,里面的代码不一定立刻执行,能不能执行还得看操作系统任务管理器的调用。每个线程对象的start()方法只能调用一次。run()功能说明:新线程启动后会调用的方法注意:如果在创建Thread对象时传入了runnable参数,则会执行runnable中的run方法;如果没传入,则默认不执行;可以创建thre

2021-10-09 16:42:47 77

原创 创建线程的3个方法

本文谈一谈创建线程的3个方法,看下文方法1:直接使用Thread//创建线程对象Thread t = new Thread(){public void run(){//要执行的任务}};//启动线程t.start();方法二:使用Runnable配合Thread,目的是把【线程】和【任务】分开Runnable runnable = new Runnable(){public void run(){//要执行的任务}};//创建线程对象Thread t = new Threa

2021-10-08 16:02:05 651

原创 进程,线程;并发和并行;同步和异步

**程序:**程序就是一个指令和数据的集合,它是静态的,就像电脑中的软件一样,都是以.exe结尾的可执行程序。**进程:**进程是程序的实体,它是动态的。计算机内部进程之间的交流很复杂被称为(IPC - inter-process-communication),它是操作系统执行和调度的最小单位,它不是操作系统的东西,而是程序动态运行的实体。**线程:**线程是进程中的一部分指令集,进程是由多个线程组成,它是CPU调用的最小单元。**并发:**单核CPU执行线程在 微观看来是串行执行,宏观看来是并行执行

2021-10-08 14:33:27 59

原创 java算法求数的所有因数

题目描述:自己的问题解答:package com.jiahao;import java.util.ArrayList;import java.util.Collections;import java.util.List;import java.util.Scanner;public class P2 {public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.n

2021-10-05 21:40:21 2059

原创 阶乘算法详解

问题描述:原来的解法;import java.util.Scanner;public class P2 {public static void main(String[] args) {System.out.println(“请输入n值”);Scanner a = new Scanner(System.in);int n = a.nextInt();if(n>20){return;}long sn = 0;while(n>0){sn = sn + jieCheng(n

2021-10-03 11:33:22 303

空空如也

空空如也

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

TA关注的人

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